#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int, int> ii;
const int INF = 1e9;
const ll LINF = 1e18;
template<typename T>
void minimize(T& a, const T& b) {
if (b < a) a = b;
}
template<typename T>
void maximize(T& a, const T& b) {
if (a < b) a = b;
}
const int N = 15e3 + 5;
int n, k;
int a[N];
int pref[N];
int f[N]; // f[i] = Số đoạn nhỏ nhất (min_k) có thể chia khi xét đoạn [1, i]
int g[N]; // g[i] = Số đoạn lớn nhất (max_k) có thể chia khi xét đoạn [1, i]
struct FenwickMin {
int n;
vector<int> ft;
FenwickMin(int n) : n(n) {
ft.resize(n, INF);
}
void update(int pos, int val) {
for (; pos >= 0; pos = (pos & (pos + 1)) - 1) {
minimize(ft[pos], val);
}
}
int get(int pos) {
int ans = INF;
for (; pos < n; pos = pos | (pos + 1)) {
minimize(ans, ft[pos]);
}
return ans;
}
};
struct FenwickMax {
int n;
vector<int> ft;
FenwickMax(int n) : n(n) {
ft.resize(n, -INF);
}
void update(int pos, int val) {
for (; pos >= 0; pos = (pos & (pos + 1)) - 1) {
maximize(ft[pos], val);
}
}
int get(int pos) {
int ans = -INF;
for (; pos < n; pos = pos | (pos + 1)) {
maximize(ans, ft[pos]);
}
return ans;
}
};
bool check(int M) {
// sum[j + 1..i] <= M
// <=> pref[i] - pref[j] <= M
// <=> pref[j] >= pref[i] - M
vector<int> vals;
for (int i = 0; i <= n; i++) {
vals.push_back(pref[i]);
}
sort(vals.begin(), vals.end());
vals.resize(unique(vals.begin(), vals.end()) - vals.begin());
int sz = vals.size();
FenwickMin fenw_min(sz);
FenwickMax fenw_max(sz);
for (int i = 0; i <= n; i++) {
// for (int j = 0; j < i; j++) {
// if (pref[j] >= pref[i] - M) {
// minimize(f[i], f[j] + 1);
// maximize(g[i], g[j] + 1);
// }
// }
if (i == 0) {
f[0] = g[0] = 0;
}
else {
// Giá trị nén của pref[j] nhỏ nhất >= pref[i] - M
int u = lower_bound(vals.begin(), vals.end(), pref[i] - M) - vals.begin();
f[i] = fenw_min.get(u) + 1;
g[i] = fenw_max.get(u) + 1;
}
// Giá trị nén của pref[i]
int v = lower_bound(vals.begin(), vals.end(), pref[i]) - vals.begin();
fenw_min.update(v, f[i]);
fenw_max.update(v, g[i]);
}
return (f[n] <= k && k <= g[n]);
}
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
cin >> n >> k;
for (int i = 1; i <= n; i++) cin >> a[i];
for (int i = 1; i <= n; i++) {
pref[i] = pref[i - 1] + a[i];
}
int l = -1e9, r = 1e9, ans = -1;
while (l <= r) {
int mid = (l + r) >> 1;
if (check(mid)) {
ans = mid;
r = mid - 1;
}
else {
l = mid + 1;
}
}
cout << ans << '\n';
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+IAoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsgIAoKdHlwZWRlZiBsb25nIGxvbmcgbGw7ICAKdHlwZWRlZiBwYWlyPGludCwgaW50PiBpaTsgIAoKY29uc3QgaW50IElORiA9IDFlOTsgIApjb25zdCBsbCBMSU5GID0gMWUxODsgIAoKdGVtcGxhdGU8dHlwZW5hbWUgVD4Kdm9pZCBtaW5pbWl6ZShUJiBhLCBjb25zdCBUJiBiKSB7CglpZiAoYiA8IGEpIGEgPSBiOyAKfQoKdGVtcGxhdGU8dHlwZW5hbWUgVD4Kdm9pZCBtYXhpbWl6ZShUJiBhLCBjb25zdCBUJiBiKSB7CglpZiAoYSA8IGIpIGEgPSBiOyAgCn0KCmNvbnN0IGludCBOID0gMTVlMyArIDU7IAoKaW50IG4sIGs7IAppbnQgYVtOXTsgIAppbnQgcHJlZltOXTsgIAoKaW50IGZbTl07IC8vIGZbaV0gPSBT4buRIMSRb+G6oW4gbmjhu48gbmjhuqV0IChtaW5faykgY8OzIHRo4buDIGNoaWEga2hpIHjDqXQgxJFv4bqhbiBbMSwgaV0KaW50IGdbTl07IC8vIGdbaV0gPSBT4buRIMSRb+G6oW4gbOG7m24gbmjhuqV0IChtYXhfaykgY8OzIHRo4buDIGNoaWEga2hpIHjDqXQgxJFv4bqhbiBbMSwgaV0KCnN0cnVjdCBGZW53aWNrTWluIHsKCWludCBuOyAgCgl2ZWN0b3I8aW50PiBmdDsgIAoKCUZlbndpY2tNaW4oaW50IG4pIDogbihuKSB7CgkJZnQucmVzaXplKG4sIElORik7IAoJfQoKCXZvaWQgdXBkYXRlKGludCBwb3MsIGludCB2YWwpIHsKCQlmb3IgKDsgcG9zID49IDA7IHBvcyA9IChwb3MgJiAocG9zICsgMSkpIC0gMSkgewoJCQltaW5pbWl6ZShmdFtwb3NdLCB2YWwpOyAKCQl9Cgl9CgoJaW50IGdldChpbnQgcG9zKSB7CgkJaW50IGFucyA9IElORjsgIAoJCWZvciAoOyBwb3MgPCBuOyBwb3MgPSBwb3MgfCAocG9zICsgMSkpIHsKCQkJbWluaW1pemUoYW5zLCBmdFtwb3NdKTsKCQl9CgkJcmV0dXJuIGFuczsgCgl9Cn07CgpzdHJ1Y3QgRmVud2lja01heCB7CglpbnQgbjsgCgl2ZWN0b3I8aW50PiBmdDsgCgoJRmVud2lja01heChpbnQgbikgOiBuKG4pIHsKCQlmdC5yZXNpemUobiwgLUlORik7IAoJfQoKCXZvaWQgdXBkYXRlKGludCBwb3MsIGludCB2YWwpIHsKCQlmb3IgKDsgcG9zID49IDA7IHBvcyA9IChwb3MgJiAocG9zICsgMSkpIC0gMSkgewoJCQltYXhpbWl6ZShmdFtwb3NdLCB2YWwpOyAKCQl9Cgl9CgoJaW50IGdldChpbnQgcG9zKSB7CgkJaW50IGFucyA9IC1JTkY7IAoJCWZvciAoOyBwb3MgPCBuOyBwb3MgPSBwb3MgfCAocG9zICsgMSkpIHsKCQkJbWF4aW1pemUoYW5zLCBmdFtwb3NdKTsgCgkJfQoJCXJldHVybiBhbnM7IAoJfQp9OyAKCmJvb2wgY2hlY2soaW50IE0pIHsKCS8vICAgICBzdW1baiArIDEuLmldIDw9IE0gIAoJLy8gPD0+IHByZWZbaV0gLSBwcmVmW2pdIDw9IE0gCgkvLyA8PT4gcHJlZltqXSA+PSBwcmVmW2ldIC0gTSAKCXZlY3RvcjxpbnQ+IHZhbHM7ICAgCglmb3IgKGludCBpID0gMDsgaSA8PSBuOyBpKyspIHsKCQl2YWxzLnB1c2hfYmFjayhwcmVmW2ldKTsgICAKCX0KCXNvcnQodmFscy5iZWdpbigpLCB2YWxzLmVuZCgpKTsgIAoJdmFscy5yZXNpemUodW5pcXVlKHZhbHMuYmVnaW4oKSwgdmFscy5lbmQoKSkgLSB2YWxzLmJlZ2luKCkpOyAgCglpbnQgc3ogPSB2YWxzLnNpemUoKTsgICAKCglGZW53aWNrTWluIGZlbndfbWluKHN6KTsKCUZlbndpY2tNYXggZmVud19tYXgoc3opOyAgCglmb3IgKGludCBpID0gMDsgaSA8PSBuOyBpKyspIHsKCQkvLyBmb3IgKGludCBqID0gMDsgaiA8IGk7IGorKykgewoJCS8vIAlpZiAocHJlZltqXSA+PSBwcmVmW2ldIC0gTSkgewoJCS8vIAkJbWluaW1pemUoZltpXSwgZltqXSArIDEpOyAKCQkvLyAJCW1heGltaXplKGdbaV0sIGdbal0gKyAxKTsgCgkJLy8gCX0KCQkvLyB9CgkJaWYgKGkgPT0gMCkgewoJCQlmWzBdID0gZ1swXSA9IDA7ICAKCQl9CgkJZWxzZSB7CgkJCS8vIEdpw6EgdHLhu4sgbsOpbiBj4bunYSBwcmVmW2pdIG5o4buPIG5o4bqldCA+PSBwcmVmW2ldIC0gTQoJCQlpbnQgdSA9IGxvd2VyX2JvdW5kKHZhbHMuYmVnaW4oKSwgdmFscy5lbmQoKSwgcHJlZltpXSAtIE0pIC0gdmFscy5iZWdpbigpOyAgIAoJCQlmW2ldID0gZmVud19taW4uZ2V0KHUpICsgMTsgICAKCQkJZ1tpXSA9IGZlbndfbWF4LmdldCh1KSArIDE7IAoJCX0KCQkvLyBHacOhIHRy4buLIG7DqW4gY+G7p2EgcHJlZltpXQoJCWludCB2ID0gbG93ZXJfYm91bmQodmFscy5iZWdpbigpLCB2YWxzLmVuZCgpLCBwcmVmW2ldKSAtIHZhbHMuYmVnaW4oKTsgICAKCQlmZW53X21pbi51cGRhdGUodiwgZltpXSk7IAoJCWZlbndfbWF4LnVwZGF0ZSh2LCBnW2ldKTsgCgl9CglyZXR1cm4gKGZbbl0gPD0gayAmJiBrIDw9IGdbbl0pOyAKfQoKaW50IG1haW4oKSB7Cglpb3M6OnN5bmNfd2l0aF9zdGRpbyhmYWxzZSk7IAoJY2luLnRpZShudWxscHRyKTsgIAkKCWNpbiA+PiBuID4+IGs7ICAgCglmb3IgKGludCBpID0gMTsgaSA8PSBuOyBpKyspIGNpbiA+PiBhW2ldOyAKCglmb3IgKGludCBpID0gMTsgaSA8PSBuOyBpKyspIHsKCQlwcmVmW2ldID0gcHJlZltpIC0gMV0gKyBhW2ldOyAKCX0KCglpbnQgbCA9IC0xZTksIHIgPSAxZTksIGFucyA9IC0xOyAgCgl3aGlsZSAobCA8PSByKSB7CgkJaW50IG1pZCA9IChsICsgcikgPj4gMTsgIAoJCWlmIChjaGVjayhtaWQpKSB7CgkJCWFucyA9IG1pZDsgIAoJCQlyID0gbWlkIC0gMTsgCgkJfQoJCWVsc2UgewoJCQlsID0gbWlkICsgMTsgCgkJfQoJfQoKCWNvdXQgPDwgYW5zIDw8ICdcbic7IAp9Cg==