#include <bits/stdc++.h>
#define int long long
using namespace std;
const int N=1e6+10;
int a[N];
int l[N],r[N];
int b[N];
int n,m;
void delete_node(int x) {
r[l[x]]=r[x],l[r[x]]=l[x];
}
void init() {
int top=0;
for(int i=1;i<=n;i++) {
if(a[i]==0) continue;
if(!top||b[top]*a[i]<0) b[++top]=a[i];
else b[top]+=a[i];
}n=top;
}
signed main()
{
cin>>n>>m;
for(int i=1;i<=n;i++) cin>>a[i];
init();int cnt=0,sum=0,k;
for(int i=1;i<=n;i++) if(b[i]>0) cnt++,sum+=b[i];
if(m>=cnt) {
cout<<sum;
return 0;
}
k=cnt-m;set<pair<int,int> > S;
for(int i=1;i<=n;i++) {
l[i]=i-1,r[i]=i+1;
if((i==1||i==n)&&b[i]<0) b[i]=1e18;
else {
S.insert({abs(b[i]),i});
b[i]=abs(b[i]);
}
}int res=0;
b[0]=b[n+1]=1e15;
while(k--) {
auto iter=S.begin();
int one=iter->first,two=iter->second;
int left=l[two],right=r[two];
res+=one;
S.erase(iter),S.erase({b[left],left}),S.erase({b[right],right});
b[two]=b[left]+b[right]-one;
S.insert({b[two],two});
delete_node(left),delete_node(right);
}
cout<<sum-res;
return 0;
}