#pragma GCC optimize("O3,inline")
#include <bits/stdc++.h>
using namespace std;
vector<vector<int>> dp;
vector<int> P;
void compute(int a, int b, int s, int e, int n) {
if (a > b) return;
int crntopt = -1;
int m = (a + b) / 2;
for (int i = s; i <= min(m - 1, e); i++) {
int crnt = dp[n - 1][i] + P[m] - P[i + 1] + 1;
if (dp[n][m] > crnt) {
dp[n][m] = crnt;
crntopt = i;
}
}
compute(a, m - 1, s, crntopt, n);
compute(m + 1, b, crntopt, e, n);
}
signed main() {
ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
int N, G, s, csum = 0; cin >> N >> G;
dp.resize(G, vector<int>(N, 1e9));
for (int i = 0; i < N; i++) {
cin >> s;
P.push_back(s);
}
for (int i = 0; i < N; i++) dp[0][i] = P[i] - P[0] + 1;
for (int i = 0; i < G; i++) dp[i][0] = 1;
for (int i = 1; i < G; i++)
compute(0, N - 1, 0, N - 1, i);
cout << dp.back().back() << '\n';
}