#include <bits/stdc++.h>
using namespace std;

using ll = long long;
using ld = long double;
using ull = unsigned long long;

#define int ll

const int maxn = 5e5 + 1;
int a[maxn];

struct t_ans {
    int val;
    list<int> l1, l2;
};

t_ans split(list<int> l) {
//    int mx = a[1] + 1;
//    int mxid = 1;
//    for (int i = 1; i <= n; i++) {
//        if (a[i] + i >= mx) {
//            mx = a[i] + i;
//            mxid = i;
//        }
//    }
    int mx = l.front() + 1;
    auto mxid = 1;
    auto mxit = l.begin();
    for (auto [it, i] = tuple(l.begin(), 1); it != l.end(); it++, i++) {
        if (*it + i >= mx) {
            mx = *it + i;
            mxit = it;
            mxid = i;
        }
    }

//
//    int ans = mx;
//
//    int mx2 = 0;
//
//    for (int i = mxid + 1; i <= n; i++) {
//        mx2 = max(mx2, a[i] + i - mxid);
//    }
    int mx2 = 0;
    {
        auto it = mxit;
        it++;
        for (int i = 1; it != l.end(); it++, i++) {
            mx2 = max(mx2, *it + i);
        }
    }
//
//    int mx3 = 0;
//    for (int i = 1; i < mxid; i++) {
//        mx3 = max(mx3, a[i] + 1);
//    }
    int mx3 = *l.begin() + 1;
    auto mx3it = l.begin();
    {
        auto it = l.begin();
        for (int i = 1; it != mxit; it++, i++) {
            if (*it + i > mx3) {
                mx3 = *it + 1;
                mx3it = it;
            }
        }
    }

    int ans;
    list<int> l1, l2;
    if (mx + mx2 > mx + mx3 - 1) {
        ans = mx + mx2;
        mxit++;
        l1 = list(l.begin(), mxit);
        l2 = list(mxit, l.end());
    } else {
        ans = mx + mx3 - 1;
        l1.push_back(*mx3it);
        l.erase(mx3it);
        l2 = l;
    }

    return { ans, l1, l2 };
//
//    ans = max(mx + mx2, mx + mx3 - 1);
//    cout << ans;
}

list<list<int>> p;
list<int> la;

void solve() {
    int n, k;
    cin >> n >> k;

    for (int i = 1; i <= n; i++) {
        cin >> a[i];
        la.emplace_back(a[i]);
    }

    cout << split(la).val << "\n";
}

signed main() {
    cin.tie(nullptr)->sync_with_stdio(false);
#ifdef local
    freopen("i.txt", "r", stdin);
    freopen("o.txt", "w", stdout);
#endif
    int t = 1;
//    cin >> t;
    while (t--) {
        solve();
    }
}
