#include <bits/stdc++.h>
#define int long long //edge case prob
int n,k;
int arr[300010];
int l[300010],r[300010];
int pref[300010];
std::vector<int> narr;
signed main() {
std::ios::sync_with_stdio(false);
std::cin.tie(nullptr);
std::cin >> n >> k;
int currRange = 0;
for(int i=0;i<n;i++)std::cin >> arr[i];
for(int i=0;i<n;i++){
if(arr[i]<=0)arr[i]=0;
else break;
}
for(int i=n-1;i>=0;i--){
if(arr[i]<=0)arr[i]=0;
else break;
}
for(int i=0;i<n;i++){
if(arr[i]!=0){
if(narr.empty())narr.push_back(arr[i]);
else if(arr[i]>0&&narr.back()>0)narr.back()+=arr[i];
else if(arr[i]<0&&narr.back()<0)narr.back()+=arr[i];
else narr.push_back(arr[i]);
}
}
int range = 0;
int sum = 0;
std::priority_queue<std::pair<int,int>> neg;
for(int i=0;i<narr.size();i++){
if(narr[i]>0){
sum+=narr[i];
range+=1;
}
else{
neg.push({narr[i],i});
}
l[i]=i,r[i]=i;
if(i==0)pref[i]=narr[i];
else pref[i+1]=pref[i-1+1]+narr[i];
//std::cout << narr[i] << ' ';
}
while(range>k){
int value = neg.top().first;
int idx = neg.top().second;
neg.pop();
int rl = l[idx-1];
int rr = r[idx+1];
r[rl]=rr;
l[rr]=rl;
sum-=(std::max((int)0,pref[rr+1]-pref[idx+1]+pref[idx-1+1]-pref[rl-1+1]));
sum+=(std::max((int)0,pref[rr+1]-pref[rl-1+1]));
range-=1;
}
std::cout << sum;
}