#include <iostream>
#include <set>
#include <unordered_map>
#include <unordered_set>
#include <map>
#include <string>
#include <vector>
#include <cmath>
#include <algorithm>
#define int long long
using namespace std;

int n, k;

struct point {
	int a, i;
};
vector<point> a;
vector<point> b;
bool OK(point a, point b) {
	if (a.a < b.a || a.a == b.a && a.i > b.i) {
		return 1;
	}
	return 0;
}

int solve() {
	vector<bool> fl(n);
	sort(a.begin(), a.end(), OK);
	int res = 0;
	int mxi = 0;
	for (int i = 0; i < k - 1; i++) {
		if (a[n - i - 1].i > mxi) {
			mxi = a[n - i - 1].i;
		}
	}
	for (int i = 0; i < k - 1; i++) {
		if (mxi != a[n - i - 1].i) {
			res += a[n - i - 1].a;
			fl[a[n - i - 1].i] = 1;
		}
	}
	res += mxi + 1;
	int mxp = a[n - k].i;
	int cch = 1;
	for (int i = mxi + 1; i < n; i++) {
		b[i].a += cch;
		cch++;
	}
	int s = 0;
	for (int i = 0; i < n; i++) {
		if (fl[i] == 0) {
			s = max(s, b[i].a);
		}
	}
	return res + s;
}

signed main() {
	ios_base::sync_with_stdio(0);
	cin.tie(0);
	cin >> n >> k;
	a.resize(n);
	for (int i = 0; i < n; i++) {
		cin >> a[i].a;
		a[i].i = i;
	}
	b = a;
	vector<bool> fl(n);
	sort(a.begin(), a.end(), OK);
	int res = 0;
	for (int i = 0; i < k - 1; i++) {
		res += a[n - i - 1].a;
		fl[a[n - i - 1].i] = 1;
	}
	res += k - 1;
	int s = 0;
	int ch = 1;
	for (int i = 0; i < n; i++) {
		if (fl[i] == 0) {
			s = max(s, ch + b[i].a);
			ch++;
		}
	}
	cout << max(s + res, solve());
}