#include <fstream>
using namespace std;
ifstream in("transport.in");
ofstream out("transport.out");
const int N = 16001;
int n, k, m, sum[N];
int drumuri(int x) {
int i = 1, j = 0, nr = 0;
while (i <= n && j <= n) {
while (i <= n && sum[i] - sum[j] <= x) i++;
nr++;
j = i - 1;
}
return nr;
}
void cautbin() {
int r = m - 1, pas = 1 << 30;
while (pas != 0) {
if (r + pas <= sum[n] && drumuri(r + pas) > k) {
r += pas;
}
pas >>= 1;
}
out << r + 1;
out.close();
}
int main()
{
in >> n >> k;
for (int i = 1; i <= n; i++) {
in >> sum[i];
m = max(m, sum[i]);
sum[i] += sum[i - 1];
}
cautbin();
}