#include <bits/stdc++.h>
using namespace std;
int n, m;
vector<long long> a;
vector<long long> b;
bool check(long long T) {
    for (int i = 1; i <= n; i++) {
        b[i] = a[i];
    }
    int last = n;
    while (last > 0 && b[last] == 0) {
        last--;
    }
    if (last == 0){
        return true;
    }
    for (int i = 1; i <= m; i++) {
        if (T <= last){
            return false;
        }
        long long rem = T - last;
        while (last > 0 && rem > 0) {
            if (b[last] <= rem) {
                rem -= b[last];
                b[last] = 0;
                last--;
                while (last > 0 && b[last] == 0) last--;
            } else {
                b[last] -= rem;
                rem = 0;
            }
        }
        if (last == 0){
            return true;
        }
    }
    return last == 0;
}
int main() {
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    freopen("wca.inp", "r", stdin);
    freopen("wca.out", "w", stdout);
    cin>>n>>m;
    a.resize(n + 1);
    b.resize(n + 1);
    for (int i = 1; i <= n; i++) {
        cin >> a[i];
    }
    long long low = 0;
    long long high = 2000000000000000LL;
    long long ans = high;
    while (low <= high) {
        long long mid = low + (high - low) / 2;
        if (check(mid)) {
            ans = mid;
            high = mid - 1;
        } else {
            low = mid + 1;
        }
    }
    cout << ans << "\n";
    return 0;
}
