# 문제 분류
이분 탐색
flag로 예외처리 하면 좋을 것 같지만 사실 for문이 loop가 되는 일은 없을 것 같기 때문에 괜찮을듯
#include <algorithm>
#include <cmath>
#include <iostream>
#include <queue>
#include <utility>
#include <vector>
#define endl "\n"
using namespace std;
typedef long long ll;
typedef pair<ll, ll> pl;
typedef pair<int, int> pi;
typedef vector<int> vi;
typedef vector<pi> vii;
const ll MOD = 1e9 + 7;
const int stMAX = 1 << 18;
const int INF = 1e9;
int N, M, K, money;
int main() {
ios_base::sync_with_stdio(0);
cin.tie(0);
cin >> N >> M;
vi v;
for (int i = 0; i < N; i++) {
cin >> money;
v.emplace_back(money);
}
int l = 0, r = 1'000'000'000;
while (l <= r) {
int m = l + r >> 1;
int cnt = 1, curr = m;
int flag = 0;
for (int p : v) {
if (p > m) {
flag = 1;
break;
}
if (curr - p < 0) {
cnt++;
curr = m;
}
curr -= p;
}
if (cnt > M || flag) {
l = m + 1;
} else {
r = m - 1;
}
}
cout << l;
}