#include <bits/stdc++.h>
#define int long long
using namespace std;
const int N = 200005;
struct place
{
int val, l, r;
}p[N];
struct node
{
int val, id;
bool operator > (node t) const
{
return val > t.val;
}
};
int n, m, ans;
int vis[N], a[N];
priority_queue<node, vector<node>, greater<node>> q;
signed main()
{
scanf("%lld %lld", &n, &m);
for(int i = 1; i <= n; i ++)
{
scanf("%lld", &a[i]);
}
for (int i = 2; i <= n; i ++)
{
p[i - 1].l = i - 2;
p[i - 1].r = i;
q.push({a[i] - a[i - 1], i - 1});
}
p[0].val = p[n].val = 0x3f3f3f3f;
for (int i = 1; i <= m; i ++)
{
while (vis[q.top().id])
{
q.pop();
}
auto now = q.top();
q.pop();
ans += now.val;
vis[p[now.id].l] = vis[p[now.id].r] = 1;
p[now.id].val = p[p[now.id].l].val + p[p[now.id].r].val - p[now.id].val;
q.push({p[now.id].val, now.id});
p[now.id].l = p[p[now.id].l].l;
p[now.id].r = p[p[now.id].r].r;
p[p[now.id].l].r = now.id;
p[p[now.id].r].l = now.id;
}
printf("%lld", ans);
return 0;
}
rt,样例没过