#include <iostream>
using namespace std;
const int N = 1e5 + 10;
long long num[N];
int demand;
int total_num;
inline bool check(long long max_sum)
{
long long temp_sum = 0;
int gap = 0;
for (int i = 1; i < total_num; i++)
{
if (temp_sum + num[i] <= max_sum)
{
temp_sum += num[i];
}
else
{
temp_sum = num[i];
gap++;
}
}
return gap >= demand;
}
int main()
{
cin >> total_num >> demand;
long long left = 0;
long long right = 0;
for (int i = 0; i < total_num; i++)
{
cin >> num[i];
right += num[i];
left = max(left, num[i]);
}
int ans = 0;
while (left <= right)
{
long long mid = (left + right) / 2;
if (check(mid))
{
ans = mid;
right = mid - 1;
}
else
{
left = mid + 1;
}
}
cout << left << endl;
return 0;
}