// Born_To_Laugh - Hughie Do
#include <bits/stdc++.h>
#define alle(AC) AC.begin(), AC.end()
#define fi first
#define se second
using namespace std;
typedef long long ll;
[[maybe_unused]] const ll MOD = 998244353, INF = 3e18 + 7;
const int maxn = 3e5 + 10;
int n, k;
ll a[maxn], val[maxn], lo[maxn], hi[maxn], dead[maxn];
void solve(){
cin >> n >> k;
for(int i=1; i<=n; ++i) cin >> a[i];
vector<ll> ranges;
for(int i=1; i<=n; ++i){
if(!a[i]) continue;
if(ranges.empty()){
ranges.push_back(a[i]);
}
else{
if((ranges.back() > 0 && a[i] > 0) || (ranges.back() < 0 && a[i] < 0)){
ranges.back() += a[i];
}
else{
ranges.push_back(a[i]);
}
}
}
int st = 0;
while (st < ranges.size() && ranges[st] <= 0) st++;
int en = (int)ranges.size() - 1;
while (en >= 0 && ranges[en] <= 0) en--;
if (st > en) {
cout << 0 << "\n";
return;
}
vector<ll> temp;
int m = 0;
ll sum = 0;
for (int i = st; i <= en; i++) {
temp.push_back(ranges[i]);
if (ranges[i] > 0) {
m++;
sum += ranges[i];
}
}
if (m <= k) {
cout << sum << "\n";
return;
}
int sz = temp.size();
val[0] = INF; val[sz + 1] = INF;
lo[0] = 0; lo[sz + 1] = sz;
hi[0] = 1; hi[sz + 1] = sz + 1;
priority_queue<pair<ll, int>, vector<pair<ll, int>>, greater<pair<ll, int>>> pq;
for(int i=1; i<=sz; ++i){
val[i] = abs(temp[i - 1]);
lo[i] = i - 1;
hi[i] = i + 1;
pq.push({val[i], i});
}
for(int i=1; i<=m - k; ++i){
if(pq.empty()) break;
auto[v, id] = pq.top();
pq.pop();
if(dead[id]) continue;
sum -= v;
int l = lo[id];
int r = hi[id];
val[id] = val[l] + val[r] - val[id];
dead[l] = 1;
dead[r] = 1;
lo[id] = lo[l];
hi[id] = hi[r];
hi[lo[id]] = id;
lo[hi[id]] = id;
pq.push({val[id], id});
}
cout << sum << "\n";
}
signed main(){
// freopen("inp.txt", "r", stdin);
// freopen("out.txt", "w", stdout);
ios_base::sync_with_stdio(false);
cin.tie(nullptr);
solve();
}