#include <bits/stdc++.h>
using namespace std;
const int MAXN = 100005;
int n, m, l, r, mid, ans, maxn;
int a[MAXN];
bool flag(int x)
{
int cnt = 0, sum = 0;
for (int now = 0; now < n; ++now)
{
if (sum + a[now] <= x)
{
sum += a[now];
}
else
{
cnt++;
sum = a[now];
}
}
if (cnt >= m) // 如果分的太多了,那么太少了,得往大走
return 1;
return 0; // 如果分的太少了,那么太大了,得变小
}
void solve()
{
cin >> n >> m;
for (int i = 0; i < n; ++i)
{
cin >> a[i];
l = max(maxn, a[i]);
r += a[i];
}
while (l <= r)
{
mid = (l + r) >> 1;
if (flag(mid))
{
l = mid + 1;
ans = l;
}
else
{
r = mid - 1;
}
}
cout << ans;
}
int main()
{
// ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
// int __ = 1;
// cin >> __;
// while (__--)
// {
solve();
// }
return 0;
}