#include<bits/stdc++.h>

#define int long long
#define F first
#define S second

using namespace std;

const int N = 5e5+10;

//int t[N];
//
//int get(int v, int tl, int tr, int l, int r)
//{
//    if(tr < l || tl > r)
//        return 0;
//    if(tl >= l && tr <= r)
//        return t[v];
//    int mid = (tl+tr)/2;
//    return get(v*2, tl, mid, l, r)+get(v*2+1, mid+1, tr, l, r);
//}
//
//void modif(int v, int tl, int tr, int l, int r, int x)
//{
//    if(tr < l || tl > r)
//        return;
//    if(tl >= l && tr <= r)
//    {
//        t[v] = x; return;
//    }
//    int mid = (tl+tr)/2;
//    modif(v*2, tl, mid, l, r); modif(v*2+1, mid+1, tr, l, r);
//    t[v] = t[v*2]+t[v*2+1];
//}

int32_t main()
{
    ios_base::sync_with_stdio(0);
    cout.tie(0);
    cin.tie(0);
    int n, k;
    cin>>n>>k;
    int a[n+10];
    multiset<pair<int, int>> ms1; multiset<int> ms2;
    for(int i = 1; i <= n; i++)
        cin>>a[i], ms1.insert({a[i]+i, i});
    int ans = 0, pref = 0;
    for(int it = 1; it <= k; it++)
    {
        int mx1 = -1, mx2 = -1;
        if(ms1.size() > 0)
            mx1 = max(mx1, (*(--ms1.end())).F-pref);
        if(ms2.size() > 0)
            mx2 = max(mx2, (*(--ms2.end())));
        if(mx1 > mx2)
        {
            ans += mx1;
            int e = (*(--ms1.end())).S-1;
            for(int i = pref+1; i <= e; i++)
            {
                ms1.erase(ms1.find({a[i]+i, i}));
                ms2.insert(a[i]);
            }
            pref = e+1;
            ms1.erase(--ms1.end());
        }
        else
        {
            ans += mx2;
            ms2.erase(ms2.find(mx2));
        }
    }
    cout<<ans;
}
