#include <bits/stdc++.h>
#define ll long long
#define el cout << '\n'
using namespace std;
const int maxn = 1e5;
const int maxk = 20;
const ll INF = 1e18;
struct Segment_Tree
{
int n;
vector<ll> tree, lazy;
Segment_Tree(int n = 0) : n(n)
{
tree.assign(4 * n + 10, 0);
lazy.assign(4 * n + 10, 0);
}
void push(int id)
{
if (lazy[id] == 0)
return ;
for (int nid = id * 2; nid <= id * 2 + 1; nid++)
{
tree[nid] += lazy[id];
lazy[nid] += lazy[id];
}
lazy[id] = 0;
}
void update(int id, int l, int r, int u, int v, ll val)
{
if (r < u || l > v)
return ;
if (u <= l && r <= v)
return tree[id] += val, lazy[id] += val, void();
int m = l + r >> 1;
push(id);
update(id << 1, l, m, u, v, val);
update(id << 1 | 1, m + 1, r, u, v, val);
tree[id] = max(tree[id << 1], tree[id << 1 | 1]);
}
ll get(int id, int l, int r, int u, int v)
{
if (r < u || l > v)
return -INF;
if (u <= l && r <= v)
return tree[id];
int m = l + r >> 1;
push(id);
return max(get(id << 1, l, m, u, v), get(id << 1 | 1, m + 1, r, u, v));
}
void update(int l, int r, ll val)
{
update(1, 0, n, l, r, val);
}
ll get(int l, int r)
{
return get(1, 0, n, l, r);
}
void print_tree(int id, int l, int r)
{
if (l == r)
return cout << tree[id] << ' ', void();
int m = l + r >> 1;
push(id);
print_tree(id << 1, l, m);
print_tree(id << 1 | 1, m + 1, r);
}
};
int n, k;
ll dp[maxk + 10][maxn + 10], a[maxn + 10], b[maxn + 10];
Segment_Tree st;
vector<int> st_min, st_max;
int main()
{
ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
if (fopen("MAXIMIZE.INP", "r"))
{
freopen("MAXIMIZE.INP", "r", stdin);
freopen("MAXIMIZE.OUT", "w", stdout);
}
cin >> n >> k;
for (int i = 1; i <= n; i++)
{
cin >> a[i];
b[i] = a[i];
}
a[0] = INF;
b[0] = -INF;
for (int j = 0; j <= k; j++)
for (int i = 0; i <= n; i++)
dp[j][i] = -INF;
dp[0][0] = 0;
for (int j = 1; j <= k; j++)
{
st = Segment_Tree(n);
st_min.clear();
st_max.clear();
st_min.push_back(0);
st_max.push_back(0);
for (int i = 1; i <= n; i++)
{
while (st_max.size() >= 2 && a[st_max.back()] <= a[i])
{
int r = st_max.back();
st_max.pop_back();
int l = st_max.back() + 1;
st.update(l - 1, r - 1, -a[r]);
}
while (st_min.size() >= 2 && a[st_min.back()] >= a[i])
{
int r = st_min.back();
st_min.pop_back();
int l = st_min.back() + 1;
st.update(l - 1, r - 1, -a[r]);
}
st.update(st_max.back(), i - 1, a[i]);
st.update(st_min.back(), i - 1, a[i]);
st.update(i - 1, i - 1, dp[j - 1][i - 1]);
dp[j][i] = st.get(0, i - 1);
st_max.push_back(i);
st_min.push_back(i);
// st.print_tree(1, 0, n);
// el;
// cout << dp[j][i] << ' ';
}
// el;
}
cout << dp[k][n];
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CgojZGVmaW5lIGxsIGxvbmcgbG9uZyAKI2RlZmluZSBlbCBjb3V0IDw8ICdcbicKCnVzaW5nIG5hbWVzcGFjZSBzdGQ7Cgpjb25zdCBpbnQgbWF4biA9IDFlNTsKY29uc3QgaW50IG1heGsgPSAyMDsKY29uc3QgbGwgSU5GID0gMWUxODsKCnN0cnVjdCBTZWdtZW50X1RyZWUKewogICAgaW50IG47CiAgICB2ZWN0b3I8bGw+IHRyZWUsIGxhenk7CgogICAgU2VnbWVudF9UcmVlKGludCBuID0gMCkgOiBuKG4pCiAgICB7CiAgICAgICAgdHJlZS5hc3NpZ24oNCAqIG4gKyAxMCwgMCk7CiAgICAgICAgbGF6eS5hc3NpZ24oNCAqIG4gKyAxMCwgMCk7CiAgICB9CiAgICB2b2lkIHB1c2goaW50IGlkKQogICAgewogICAgICAgIGlmIChsYXp5W2lkXSA9PSAwKQogICAgICAgICAgICByZXR1cm4gOwogICAgICAgIGZvciAoaW50IG5pZCA9IGlkICogMjsgbmlkIDw9IGlkICogMiArIDE7IG5pZCsrKQogICAgICAgIHsKICAgICAgICAgICAgdHJlZVtuaWRdICs9IGxhenlbaWRdOwogICAgICAgICAgICBsYXp5W25pZF0gKz0gbGF6eVtpZF07CiAgICAgICAgfQogICAgICAgIGxhenlbaWRdID0gMDsKICAgIH0KICAgIHZvaWQgdXBkYXRlKGludCBpZCwgaW50IGwsIGludCByLCBpbnQgdSwgaW50IHYsIGxsIHZhbCkKICAgIHsKICAgICAgICBpZiAociA8IHUgfHwgbCA+IHYpCiAgICAgICAgICAgIHJldHVybiA7CiAgICAgICAgaWYgKHUgPD0gbCAmJiByIDw9IHYpCiAgICAgICAgICAgIHJldHVybiB0cmVlW2lkXSArPSB2YWwsIGxhenlbaWRdICs9IHZhbCwgdm9pZCgpOwogICAgICAgIGludCBtID0gbCArIHIgPj4gMTsKICAgICAgICBwdXNoKGlkKTsKICAgICAgICB1cGRhdGUoaWQgPDwgMSwgbCwgbSwgdSwgdiwgdmFsKTsKICAgICAgICB1cGRhdGUoaWQgPDwgMSB8IDEsIG0gKyAxLCByLCB1LCB2LCB2YWwpOwogICAgICAgIHRyZWVbaWRdID0gbWF4KHRyZWVbaWQgPDwgMV0sIHRyZWVbaWQgPDwgMSB8IDFdKTsKICAgIH0KICAgIGxsIGdldChpbnQgaWQsIGludCBsLCBpbnQgciwgaW50IHUsIGludCB2KQogICAgewogICAgICAgIGlmIChyIDwgdSB8fCBsID4gdikKICAgICAgICAgICAgcmV0dXJuIC1JTkY7CiAgICAgICAgaWYgKHUgPD0gbCAmJiByIDw9IHYpCiAgICAgICAgICAgIHJldHVybiB0cmVlW2lkXTsKICAgICAgICBpbnQgbSA9IGwgKyByID4+IDE7CiAgICAgICAgcHVzaChpZCk7CiAgICAgICAgcmV0dXJuIG1heChnZXQoaWQgPDwgMSwgbCwgbSwgdSwgdiksIGdldChpZCA8PCAxIHwgMSwgbSArIDEsIHIsIHUsIHYpKTsKICAgIH0KICAgIHZvaWQgdXBkYXRlKGludCBsLCBpbnQgciwgbGwgdmFsKQogICAgewogICAgICAgIHVwZGF0ZSgxLCAwLCBuLCBsLCByLCB2YWwpOwogICAgfQogICAgbGwgZ2V0KGludCBsLCBpbnQgcikKICAgIHsKICAgICAgICByZXR1cm4gZ2V0KDEsIDAsIG4sIGwsIHIpOwogICAgfQogICAgdm9pZCBwcmludF90cmVlKGludCBpZCwgaW50IGwsIGludCByKQogICAgewogICAgICAgIGlmIChsID09IHIpCiAgICAgICAgICAgIHJldHVybiBjb3V0IDw8IHRyZWVbaWRdIDw8ICcgJywgdm9pZCgpOwogICAgICAgIGludCBtID0gbCArIHIgPj4gMTsKICAgICAgICBwdXNoKGlkKTsKICAgICAgICBwcmludF90cmVlKGlkIDw8IDEsIGwsIG0pOwogICAgICAgIHByaW50X3RyZWUoaWQgPDwgMSB8IDEsIG0gKyAxLCByKTsKICAgIH0KfTsKCmludCBuLCBrOwpsbCBkcFttYXhrICsgMTBdW21heG4gKyAxMF0sIGFbbWF4biArIDEwXSwgYlttYXhuICsgMTBdOwpTZWdtZW50X1RyZWUgc3Q7CnZlY3RvcjxpbnQ+IHN0X21pbiwgc3RfbWF4OwoKaW50IG1haW4oKQp7CiAgICBpb3NfYmFzZTo6c3luY193aXRoX3N0ZGlvKDApOyBjaW4udGllKDApOyBjb3V0LnRpZSgwKTsKICAgIGlmIChmb3BlbigiTUFYSU1JWkUuSU5QIiwgInIiKSkKICAgIHsKICAgICAgICBmcmVvcGVuKCJNQVhJTUlaRS5JTlAiLCAiciIsIHN0ZGluKTsKICAgICAgICBmcmVvcGVuKCJNQVhJTUlaRS5PVVQiLCAidyIsIHN0ZG91dCk7CiAgICB9CgogICAgY2luID4+IG4gPj4gazsKICAgIGZvciAoaW50IGkgPSAxOyBpIDw9IG47IGkrKykKICAgIHsKICAgICAgICBjaW4gPj4gYVtpXTsKICAgICAgICBiW2ldID0gYVtpXTsKICAgIH0KICAgIGFbMF0gPSBJTkY7CiAgICBiWzBdID0gLUlORjsKICAgIGZvciAoaW50IGogPSAwOyBqIDw9IGs7IGorKykKICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8PSBuOyBpKyspCiAgICAgICAgICAgIGRwW2pdW2ldID0gLUlORjsKICAgIGRwWzBdWzBdID0gMDsKICAgIGZvciAoaW50IGogPSAxOyBqIDw9IGs7IGorKykKICAgIHsKICAgICAgICBzdCA9IFNlZ21lbnRfVHJlZShuKTsKICAgICAgICBzdF9taW4uY2xlYXIoKTsKICAgICAgICBzdF9tYXguY2xlYXIoKTsKICAgICAgICBzdF9taW4ucHVzaF9iYWNrKDApOwogICAgICAgIHN0X21heC5wdXNoX2JhY2soMCk7CiAgICAgICAgZm9yIChpbnQgaSA9IDE7IGkgPD0gbjsgaSsrKQogICAgICAgIHsKICAgICAgICAgICAgd2hpbGUgKHN0X21heC5zaXplKCkgPj0gMiAmJiBhW3N0X21heC5iYWNrKCldIDw9IGFbaV0pCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGludCByID0gc3RfbWF4LmJhY2soKTsKICAgICAgICAgICAgICAgIHN0X21heC5wb3BfYmFjaygpOwogICAgICAgICAgICAgICAgaW50IGwgPSBzdF9tYXguYmFjaygpICsgMTsKICAgICAgICAgICAgICAgIHN0LnVwZGF0ZShsIC0gMSwgciAtIDEsIC1hW3JdKTsKICAgICAgICAgICAgfQogICAgICAgICAgICB3aGlsZSAoc3RfbWluLnNpemUoKSA+PSAyICYmIGFbc3RfbWluLmJhY2soKV0gPj0gYVtpXSkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgaW50IHIgPSBzdF9taW4uYmFjaygpOwogICAgICAgICAgICAgICAgc3RfbWluLnBvcF9iYWNrKCk7CiAgICAgICAgICAgICAgICBpbnQgbCA9IHN0X21pbi5iYWNrKCkgKyAxOwogICAgICAgICAgICAgICAgc3QudXBkYXRlKGwgLSAxLCByIC0gMSwgLWFbcl0pOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHN0LnVwZGF0ZShzdF9tYXguYmFjaygpLCBpIC0gMSwgYVtpXSk7CiAgICAgICAgICAgIHN0LnVwZGF0ZShzdF9taW4uYmFjaygpLCBpIC0gMSwgYVtpXSk7CiAgICAgICAgICAgIHN0LnVwZGF0ZShpIC0gMSwgaSAtIDEsIGRwW2ogLSAxXVtpIC0gMV0pOwogICAgICAgICAgICBkcFtqXVtpXSA9IHN0LmdldCgwLCBpIC0gMSk7CiAgICAgICAgICAgIHN0X21heC5wdXNoX2JhY2soaSk7CiAgICAgICAgICAgIHN0X21pbi5wdXNoX2JhY2soaSk7CiAgICAgICAgICAgIC8vIHN0LnByaW50X3RyZWUoMSwgMCwgbik7CiAgICAgICAgICAgIC8vIGVsOwogICAgICAgICAgICAvLyBjb3V0IDw8IGRwW2pdW2ldIDw8ICcgJzsKICAgICAgICB9CiAgICAgICAgLy8gZWw7CiAgICB9CiAgICBjb3V0IDw8IGRwW2tdW25dOwp9Cg==