#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<queue>
using namespace std;
int n,k,a[500001],d[500001],ans,vis[500001],l[500001],r[500001];
struct node
{
int v,no;
bool operator < (const node& x) const
{
return v>x.v;
}
};
priority_queue<node> q;
int main()
{
scanf("%d%d",&n,&k);
scanf("%d",&a[0]);
for(int i=1;i<n;i++)
{
scanf("%d",&a[i]);
d[i]=a[i]-a[i-1];
l[i]=i-1;
r[i]=i+1;
q.push((node){d[i],i});
}
d[0]=d[n]=1000000010;
for(int i=1;i<=k;i++)
{
while(vis[q.top().no]);
q.pop();
node u=q.top();
q.pop();
ans+=u.v;
vis[l[u.no]]=vis[r[u.no]]=1;
d[u.no]=d[l[u.no]]+d[r[u.no]]-d[u.no];
q.push((node){d[u.no],u.no});
l[u.no]=l[l[u.no]];
r[u.no]=r[r[u.no]];
r[l[u.no]]=l[r[u.no]]=u.no;
}
printf("%d",ans);
return 0;
}