#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
typedef pair<LL,int> PLI;
const int N=1e6+10;
LL a[N];
int L[N],R[N],del[N];
priority_queue<PLI,vector<PLI>,greater<PLI>> q;
void remove(int x)
{
L[R[x]]=L[x];
R[L[x]]=R[x];
del[x]=1;
}
template<typename T>void qr(T &x)
{
x=0;int f=1;char c=getchar();
for(;!isdigit(c);c=getchar())if(c=='-')f=-1;
for(; isdigit(c);c=getchar()) x=x*10+c-48;
x=x*f;
}
int main()
{
int n,m;qr(n);qr(m);
int k=0;
for(int i=1;i<=n;i++)
{
LL x;qr(x);
if(x!=0)
{
if(!k||a[k]*x<0)a[++k]=x;
else a[k]+=x;
}
}
n=k;
LL ans=0;int cnt=0;
for(int i=1;i<=n;i++)
{
L[i]=i-1,R[i]=i+1;
q.push({abs(a[i]),i});
if(a[i]>0)ans+=a[i],cnt++;
}
memset(del,0,sizeof(del));
while(cnt>m)
{
while(del[q.top().second])q.pop();
int x=q.top().second;q.pop();
if(a[x]>0||(L[x]!=0&&R[x]!=n+1))
{
ans-=abs(a[x]);
a[x]+=a[L[x]]+a[R[x]];
q.push({abs(a[x]),x});
remove(L[x]);
remove(R[x]);
cnt--;
}
}
printf("%lld",ans);
return 0;
}