#include <bits/stdc++.h>
using namespace std;
#define fox(i, n) for(int i = 0; i < (n); ++i)
#define rep(i, a, b) for(int i = a; i < (b); ++i)
#define rin(i, a, b) for(int i = (a); i <= (b); ++i)
#define rev(i, a, b) for(int i = (b); i >= (a); --i)
#define all(x) begin(x), end(x)
#define rall(x) rbegin(x), rend(x)
#define sz(x) (int)(x).size()
#define int long long
typedef long long ll;
typedef long double ld;
typedef string str;
typedef pair<int, int> ii;
typedef vector<int> vi;
typedef vector<ii> vii;
#define F first
#define S second
#define pb push_back
#define eb emplace_back
ll cdiv(ll a, ll b) { return a/b+((a^b)>0&&a%b); }
ll fdiv(ll a, ll b) { return a/b-((a^b)<0&&a%b); }
int MSB(int x) { return bit_width((unsigned long long)x)-1; }
int LSB(int x) { return countr_zero((unsigned long long)x); }
ii BS(int L, int H, function<int(int)>P) {
while(abs(L-H)>1){
int M=midpoint(L,H);
if(P(M))H=M;
else L=M;
}
return{L,H};
}
mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());
int urand(int a, int b) { return uniform_int_distribution<int>(a, b)(rng); }
template<class T> bool ckmin(T& a, const T& b) {
return b < a ? a = b, 1 : 0; }
template<class T> bool ckmax(T& a, const T& b) {
return a < b ? a = b, 1 : 0; }
const int inf = 1e17;
const int N = 3e5+1;
int a[N];
ii dp[N][2];
void solve(){
int n,k;cin>>n>>k;
rin(i,1,n)cin>>a[i];
auto calc = [&](int l) -> ii {
// dp[i][j] = state is: consider first i, j is whether the last thing is part of a subarray
// the answer is {max value, max # of subarrays to achieve it}
dp[1][0] = {0,0};
dp[1][1] = {a[1]-l,1};
rin(i,2,n){
dp[i][0] = max(dp[i-1][0], dp[i-1][1]);
dp[i][1] = max(
make_pair(dp[i-1][0].F + a[i] - l, dp[i-1][0].S + 1),
make_pair(dp[i-1][1].F + a[i], dp[i-1][1].S)
);
}
return max(dp[n][0], dp[n][1]);
};
int lo = 0;
int hi = 1e18;
while((hi-lo)>1){
int mid=midpoint(lo,hi);
if(calc(mid).S >= k)lo=mid;
else hi=mid;
}
// calc at the 'representative' point
auto[val,amt] = calc(lo);
val += amt * lo; // cancel out the affect of the penalty
val += (k - amt) * lo; // move backwards along the line of slope 'lo'
cout << val << '\n';
}
int32_t main() {
cin.tie(0)->sync_with_stdio(0);
cin.exceptions(cin.failbit);
solve();
}