#include <bits/extc++.h>

#define int long long

using namespace std;

struct fenwick {
    vector<int> t;
    void init(int n) {
        t.assign(n, 0);
    }
    void upd(int i, int x) {
        while (i < (int)t.size()) {
            t[i] += x;
            i |= i + 1;
        }
    }
    int get(int i) {
        int s = 0;
        while (i >= 0) {
            s += t[i];
            --(i &= i + 1);
        }
        return s;
    }
    int get(int i, int j) {
        return get(j) - get(i - 1);
    }
};

signed main() {
    ios_base::sync_with_stdio(false);
    cin.tie(nullptr);
    int n, k;
    cin >> n >> k;
    vector<int> a(n);
    for (int i = 0; i < n; i++) {
        cin >> a[i];
    }
    vector<int> t(n);
    for (int i = 0; i < n; i++) {
        t[i] = a[i] + i;
    }
    for (int i = n - 2; i >= 0; i--) {
        t[i] = max(t[i], t[i + 1]);
    }
    if (k == 1) {
        cout << t[0] + 1 << '\n';
        return 0;
    }
    int ans = 0;
    fenwick f1, f2;
    f1.init(n);
    f2.init(n);
    vector<int> pos(n);
    {
        vector<pair<int, int>> u;
        for (int i = 0; i < n; i++) {
            u.emplace_back(a[i], i);
        }
        sort(u.rbegin(), u.rend());
        for (int i = 0; i < n; i++) {
            pos[u[i].second] = i;
        }
    }
    vector<int> w(n, -1);
    for (int i = 0; i < n; i++) {
        f1.upd(pos[i], 1);
        f2.upd(pos[i], a[i]);
        int l = -1, r = n;
        while (r - l > 1) {
            int m = (l + r) >> 1;
            if (f1.get(m) >= k - 2) {
                r = m;
            } else {
                l = m;
            }
        }
        if (r < n) {
            assert(f1.get(r) == k - 2);
            w[i] = f2.get(r);
        }
    }
//    for (int i = 0; i < n; i++) {
//        cerr << i + 1 << "  " << w[i] << '\n';
//    }
    for (int i = k - 1; i < n; i++) {
        int cur = 0;
        {
            int z = t[i] - i + 1;
//            for (int j = i + 1; j < n; j++) {
//                z = max(z, a[j] + (j - i) + 1);
//            }
            cur = z;
        }
        if (i > 0) {
            cur += a[i - 1] + (i - (k - 2));
//            vector<int> b;
//            for (int j = 0; j < i - 1; j++) {
//                b.push_back(a[j]);
//            }
//            sort(b.rbegin(), b.rend());
//            for (int j = 0; j < k - 2; j++) {
//                cur += b[j] + 1;
//            }
            cur += w[i - 2] + k - 2;
        }
        ans = max(ans, cur);
        //cerr << "!! " << i + 1 << "  " << cur << '\n';
    }
    cout << ans << '\n';
    return 0;
}
/*

5 3
3 7 10 1 2

 */