#include <bits/stdc++.h>
#define ll long long
#define tmp(x) std::cout<<"& "<<(x)<<" &\n"
#define rep(i,a,b) for(int i=(a);i<=(b);++i)
#define per(i,a,b) for(int i=(a);i>=(b);--i)
using namespace std;
const int maxn=3e5+100;
const int mo=998244353;
int n,k,st,ed;
int a[maxn],q[maxn],pos[maxn],cnt[maxn],tmp;
ll w[maxn],s[maxn];
inline ll getv(int i,int j){return s[i]+s[j]-s[i+j>>1]-s[i+j+1>>1];}
inline bool cmp(int a,int b,int c){
ll a1=w[a]+getv(a,c),b1=w[b]+getv(b,c);
if(a1==b1)return cnt[a]<cnt[b];
return a1<b1;
}
int work(ll mid){
st=ed=1,w[0]=0;
q[1]=0,pos[1]=1;
rep(i,1,n){
while(st<ed&&pos[st+1]<=i)++st;
w[i]=w[q[st]]+getv(i,q[st])+mid;
cnt[i]=cnt[q[st]]+1;
while(st<=ed&&i<pos[ed]&&cmp(i,q[ed],pos[ed]))--ed;
int l=pos[ed],r=n+1 ;
while(l<r){
int m=l+r>>1;
if(cmp(i,q[ed],m))r=m;
else l=m+1;
}
if(l<=n)q[++ed]=i,pos[ed]=l;
}
return cnt[n];
}
int main(){
// freopen("in.txt","r",stdin);
scanf("%d%d",&n,&k);
rep(i,1,n) scanf("%d",&a[i]),s[i]=s[i-1]+a[i];
ll l=0,r=s[n]+1;
while(l+1<r){
ll mid=l+r>>1;
tmp=work(mid);
if(tmp>=k)l=mid+1;
else r=mid;
}
if(work(l)<=k)printf("%lld",w[n]-k*l);
else if(work(l+1)<=k)printf("%lld",w[n]-k*(l+1));
return 0;
}