#include <bits/stdc++.h>
using namespace std;
#define MAX 300300
#define ll long long
#define pii pair<int,int>
#define pll pair<ll,ll>
#define fi first
#define se second
#define all(a) (a).begin(),(a).end()
#define __buitin_popcount __builtin_popcountll
#define BIT(x,i) (((x)>>(i))&1ll)
#define MASK(i) (1ll<<(i))
template<class X,class Y> bool maximize(X &x,Y y)
{
if(x<y)
{
x=y;
return 1;
}
return 0;
}
template<class X,class Y> bool minimize(X &x,Y y)
{
if(y<x)
{
x=y;
return 1;
}
return 0;
}
const int inf=1e9+412009;
const ll INF=2e18+412009;
pll operator + (pll a,pll b)
{
return {a.fi+b.fi,a.se+b.se};
}
bool operator < (pll a,pll b)
{
return a.fi==b.fi ? a.se>b.se : a.fi<b.fi;
}
int n,K;
int a[MAX];
void nhap()
{
cin>>n>>K;
for(int i=1;i<=n;i++) cin>>a[i];
}
pll dp[MAX][2];
pll getdp(ll tax)
{
memset(dp,0,sizeof(dp));
pll res={0,0};
dp[0][1]={-tax,1};
for(int i=1;i<=n;i++)
{
dp[i][0]=dp[i-1][0];
dp[i][1]=dp[i-1][0]+make_pair(a[i]-tax,1);
maximize(dp[i][0],dp[i-1][1]);
maximize(dp[i][1],dp[i-1][1]+make_pair(a[i],0));
maximize(res,max(dp[i][1],dp[i][0]));
}
return res;
}
void solve()
{
ll l=1,r=INF;
ll taxed=INF;
while(l<=r)
{
ll mid=l+r>>1;
pll tmp=getdp(mid);
if(tmp.se>K) l=mid+1;
else
{
taxed=mid;
r=mid-1;
}
}
pll res=getdp(taxed);
cout<<res.fi+res.se*taxed;
}
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(nullptr);cout.tie(nullptr);
nhap();
solve();
return 0;
}