#include<bits/stdc++.h>
using namespace std;
int n,k;
long long a[100005],ans;
int del[2000005];
int siz_link,siz_heap;
struct HEAP{
long long val;
int to_link;
};
HEAP Heap[200005];
struct Link{
long long val;
int pre,nxt;
}link[2000005];
long long Top(){
return Heap[1].val;
}
void up(int x){
while(x>1){
if(Heap[x/2].val>Heap[x].val){
swap(Heap[x/2],Heap[x]);
x/=2;
}
else break;
}
}
void down(int x){
int son=x*2;
while(son<siz_heap){
if(son<siz_heap&&Heap[son+1].val<Heap[son].val){
swap(Heap[son+1],Heap[son]);
}
if(Heap[son].val<Heap[x].val){
swap(Heap[son],Heap[x]);
x=son;
son=x*2;
}
else break;
}
}
void Heap_insert(long long val,int to_link){
siz_heap++;
Heap[siz_heap]={val,to_link};
up(siz_heap);
}
void link_insert(long long val){
siz_link++;
link[siz_link].pre=siz_link-1;
link[siz_link-1].nxt=siz_link;
link[siz_link].val=val;
}
void Heap_remove(int x){
Heap[x]=Heap[siz_heap];
siz_heap--;
up(x),down(x);
}
void link_delete(int x){
if(!x)return;
del[x]=1;
link[link[x].nxt].pre=link[x].pre;
link[link[x].pre].nxt=link[x].nxt;
}
signed main(){
scanf("%d%d",&n,&k);
for(int i=1;i<=n;i++){
scanf("%lld",&a[i]);
}
for(int i=1;i<n;i++){
link_insert(a[i+1]-a[i]);
Heap_insert(a[i+1]-a[i],siz_link);
}
link[0].nxt=1;
int turn=0;
while(k--){
turn++;
int i_begin=1;
if(del[1])i_begin=link[0].nxt;
while(del[Heap[1].to_link])Heap_remove(1);
ans+=Top();
int p=Heap[1].to_link;
int pre,nxt;
long long val=link[link[p].pre].val+link[link[p].nxt]
.val-link[p].val;
pre=link[link[p].pre].pre;
nxt=link[link[p].nxt].nxt;
link_delete(Heap[1].to_link);
link_delete(link[Heap[1].to_link].pre);
link_delete(link[Heap[1].to_link].nxt);
i_begin=1;
if(del[1])i_begin=link[0].nxt;
siz_link++;
link[siz_link].pre=pre;
link[pre].nxt=siz_link;
link[siz_link].nxt=nxt;
link[nxt].pre=siz_link;
link[siz_link].val=val;
Heap_insert(val,siz_link);
}
printf("%lld",ans);
}