// CutSandstone always reads the entire problem statement.
#include <bits/stdc++.h>
using namespace std;
#define a first
#define b second
const int mod = 1e9 + 7;
const int inv2 = (mod + 1) / 2;
using ll = long long;
const ll oo = 1e18;
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
int n, k;
cin >> n >> k;
vector<ll> a(n);
for (ll& i : a) cin >> i;
ll lo = 0, hi = oo;
ll ans = -oo;
while (lo < hi) {
ll m = (lo + hi) >> 1;
pair<ll, int> dp1 = {a[0] - m, 1}, dp2 = {0, 0};
for (int i = 1; i < n; i++) {
auto dp1a = max(pair<ll, int>{dp1.a + a[i], dp1.b},
pair<ll, int>{dp2.a + a[i] - m, dp2.b + 1});
auto dp2a = max(dp1, dp2);
dp1 = dp1a;
dp2 = dp2a;
}
auto ret = max(dp1, dp2);
if (ret.b >= k) {
lo = m;
ans = max(ans, ret.a + m * k);
} else
hi = m - 1;
}
cout << ans << "\n";
}