/*author - Aryan Mittal*/
#include<bits/stdc++.h>
using namespace std;

#pragma GCC push_options
#pragma GCC optimize ("unroll-loops")


#define print(a)        for (auto x : a) cout << x << " "; cout << endl
#define print_upto(a,n)        for(int i=0;i<n;i++)    cout<<a[i]<<" "; cout<<endl
#define take(x,n)           for(int i=0;i<n;i++)  cin>>x[i];

#define watch(x) cout << (#x) << " is " << (x) << "\n"
#define watch2(x,y) cout <<(#x)<<" is "<<(x)<<" and "<<(#y)<<" is "<<(y)<<"\n"

#define ll long long
#define pie_value 3.14159265358979323846

int main() {

	// Use ctrl+shift+b ( second option )
	ios_base::sync_with_stdio(false);
	cin.tie(0);
	cout.tie(0);

#ifndef ONLINE_JUDGE
	freopen("input.txt", "r", stdin);
	freopen("output.txt", "w", stdout);
	freopen("error.txt" , "w" , stderr);
#endif

	ll n, k;
	cin >> n >> k;

	ll a[n + 1];
	for (ll i = 1; i <= n; i++) {
		cin >> a[i];
	}

	ll dp_f[n + 3] = {0};
	ll dp_b[n + 3] = {0};

	if (k == 1) {
		dp_f[1] = 0;
		dp_f[2] = a[2];
		for (ll j = 3 ; j <= n; j++) {
			dp_f[j] = a[j] + max(dp_f[j - 1], dp_f[j - 2]);
		}
	} else if (k == 2) {
		dp_f[2] = 0;
		for (ll j = 3 ; j <= n; j++) {
			dp_f[j] = a[j] + max(dp_f[j - 1], dp_f[j - 2]);
		}
	} else {
		for (ll j = k + 1 ; j <= n; j++) {
			dp_f[j] = a[j] + max(dp_f[j - 1], dp_f[j - 2]);
		}
	}

	dp_b[1] = a[1];
	dp_b[2] = a[2] + a[1];
	for (ll i = 3; i <= n; i++) {
		dp_b[i] = a[i] + max(dp_b[i - 1], dp_b[i - 2]);
	}

	ll max_ans = INT_MIN;
	for (ll i = k + 1; i <= n; i++) {
		max_ans = max(max_ans , dp_b[i] + dp_f[i] - a[i]);
	}
	if (k == n) {
		max_ans = dp_b[n];
	}

	cout << max_ans << "\n";

	return 0;
}
