#include <bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
using namespace std;
using namespace __gnu_pbds;
#define all(x) (x).begin(), (x).end()
#define endl '\n'
using ll = int64_t;
typedef tree<int, null_type, less<int>, rb_tree_tag,
tree_order_statistics_node_update> ordered_set;
// find_by_order(k) kth smallest
// order_of_key(key) num elements smaller then key
void test_case() {
int n, k; cin >> n >> k;
ll prev = -1;
vector<ll> d, a;
for (int i = 0; i < n; i++) {
ll x; cin >> x;
if (prev != -1) d.push_back(x - prev - 1);
prev = x;
a.push_back(x);
}
sort(all(d));
reverse(all(d));
ll val = 0;
for (int i = 0; i < k - 1; i++)
val += d[i];
cout << *max_element(all(a)) - *min_element(all(a)) - val + 1 << endl;
}
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
int T = 1;
for (int i = 0; i < T; i++)
test_case();
}