#include #include #include #include using namespace std;struct node{ int pos; long long val; bool operator < (const node &b) const { return val q;long long read(){ long long s=0,f=1; char in=getchar(); while(in<'0'||in>'9') { if(in=='-') f=-1; in=getchar(); } while(in>='0'&&in<='9') { s=(s<<1)+(s<<3)+in-'0'; in=getchar(); } return s*f;}long long value[500100];long long data[500100];long long lef[500100];long long righ[500100];bool vis[500100];int main(){ long long n=read(),k=read(); for(int i=1;i<=n;i++) { data[i]=read(); lef[i]=i-1; righ[i]=i+1; } lef[n+1]=n; righ[0]=1; node pas; for(int i=1;i<=n;i++) { pas.pos=i; pas.val=data[i]; q.push(pas); } long long ans=0; while(k--) { while(vis[q.top().pos]) q.pop(); pas=q.top(); q.pop(); if(pas.val<0) break; ans+=pas.val; data[pas.pos]=data[lef[pas.pos]]+data[righ[pas.pos]]-data[pas.pos]; pas.val=data[pas.pos]; vis[lef[pas.pos]]=vis[righ[pas.pos]]=true; lef[pas.pos]=lef[lef[pas.pos]]; righ[lef[pas.pos]]=pas.pos; righ[pas.pos]=righ[righ[pas.pos]]; lef[righ[pas.pos]]=pas.pos; q.push(pas); } printf("%lld",ans);}