#include<bits/stdc++.h>
#define int long long
using namespace std;
struct node{
int val,dp,minval;
};
int dp[100005][105],a[100005],n,k;
int32_t main(){
ios_base::sync_with_stdio(0);
cin.tie(0);cout.tie(0);
cin >> n >> k;
for(int i = 1; i <= n ;i++){
cin >> a[i];
}
for(int i = 1; i <= n; i++) for(int j = 1; j <= k; j++) dp[i][j] = 1e16;
for(int i = 1; i <= n; i++) dp[i][1] = max(dp[i-1][1],a[i]);
for(int j = 2; j <= k; j++){
vector<node> st;
for(int i = j; i <= n; i++){
int minn = dp[i-1][j-1];
while(!st.empty() && st.back().val <= a[i]){
minn = min(minn,st.back().dp); st.pop_back();
}
int minval = minn + a[i];
if(!st.empty()) minval = min(minval,st.back().minval);
st.push_back({a[i],minn,minval});
dp[i][j] = st.back().minval;
}
}
cout << dp[n][k];
}
I2luY2x1ZGU8Yml0cy9zdGRjKysuaD4KI2RlZmluZSBpbnQgbG9uZyBsb25nCnVzaW5nIG5hbWVzcGFjZSBzdGQ7CnN0cnVjdCBub2RlewogICAgaW50IHZhbCxkcCxtaW52YWw7Cn07CmludCBkcFsxMDAwMDVdWzEwNV0sYVsxMDAwMDVdLG4sazsKaW50MzJfdCBtYWluKCl7CiAgICBpb3NfYmFzZTo6c3luY193aXRoX3N0ZGlvKDApOwogICAgY2luLnRpZSgwKTtjb3V0LnRpZSgwKTsKICAgIGNpbiA+PiBuID4+IGs7CiAgICBmb3IoaW50IGkgPSAxOyBpIDw9IG4gO2krKyl7CiAgICAgICAgY2luID4+IGFbaV07CiAgICB9CiAgICBmb3IoaW50IGkgPSAxOyBpIDw9IG47IGkrKykgZm9yKGludCBqID0gMTsgaiA8PSBrOyBqKyspIGRwW2ldW2pdID0gMWUxNjsKICAgIGZvcihpbnQgaSA9IDE7IGkgPD0gbjsgaSsrKSBkcFtpXVsxXSA9IG1heChkcFtpLTFdWzFdLGFbaV0pOwogICAgZm9yKGludCBqID0gMjsgaiA8PSBrOyBqKyspewogICAgICAgIHZlY3Rvcjxub2RlPiBzdDsKICAgICAgICBmb3IoaW50IGkgPSBqOyBpIDw9IG47IGkrKyl7CiAgICAgICAgICAgIGludCBtaW5uID0gZHBbaS0xXVtqLTFdOwogICAgICAgICAgICB3aGlsZSghc3QuZW1wdHkoKSAmJiBzdC5iYWNrKCkudmFsIDw9IGFbaV0pewogICAgICAgICAgICAgICAgbWlubiA9IG1pbihtaW5uLHN0LmJhY2soKS5kcCk7IHN0LnBvcF9iYWNrKCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaW50IG1pbnZhbCA9IG1pbm4gKyBhW2ldOwogICAgICAgICAgICBpZighc3QuZW1wdHkoKSkgbWludmFsID0gbWluKG1pbnZhbCxzdC5iYWNrKCkubWludmFsKTsKICAgICAgICAgICAgc3QucHVzaF9iYWNrKHthW2ldLG1pbm4sbWludmFsfSk7CiAgICAgICAgICAgIGRwW2ldW2pdID0gc3QuYmFjaygpLm1pbnZhbDsKICAgICAgICB9CiAgICB9CiAgICBjb3V0IDw8IGRwW25dW2tdOwp9