#include <fstream>
using namespace std;
int N, K;
int* s;
int maximum = 0;
long long sum = 0;
bool check(int C) {
int i = 0, t = K, c = 0;
while (t > 0 && i < N) {
if (c + s[i] <= C)
c += s[i++];
else {
c = 0;
t--;
}
}
if (i == N - 1)
return false;
return true;
}
int bin_search(int st, int dr) {
int m;
while (st <= dr) {
m = st + (dr - st) / 2;
if (check(m))
return m;
else
st = m + 1;
}
}
int main() {
int sol;
// input
ifstream f("transport.in");
f >> N >> K;
s = new int[N];
for (int i = 0; i < N; i++) {
f >> s[i];
sum += s[i];
maximum = s[i] > maximum ? s[i] : maximum;
}
f.close();
// solve
sol = bin_search(maximum, sum);
while (check(sol - 1))
sol--;
// output
ofstream g("transport.out");
g << sol << '\n';
g.close();
// free memory
delete[] s;
return 0;
}