#include <iostream>
#include <fstream>
#define dMAX 16005
using namespace std;
int n, k, c;
int arr[dMAX];
int S, maxi, result;
ifstream fin("transport.in");
ofstream fout("transport.out");
bool Transportable(int capacity) {
int tempSum = 0, steps = 1;
for (int i = 1; i <= n; i++) {
if (tempSum + arr[i] <= capacity) {
tempSum += arr[i];
} else {
steps++;
tempSum = arr[i];
}
}
return steps <= k;
}
void BinarySearch(int a, int b) {
if (a > b) return;
c = a + (b - a) / 2;
if (Transportable(c)) {
result = c;
BinarySearch(a, c - 1);
} else BinarySearch(c + 1, b);
}
int main()
{
int i, j;
fin >> n >> k;
for (i = 1; i <= n; i++) {
fin >> arr[i];
S += arr[i];
maxi = max(maxi, arr[i]);
}
BinarySearch(maxi, S);
fout << result;
return 0;
}