// Source: https://usaco.guide/general/io
#include <iostream> // cin, cout
#include <vector> // vector
#include <string> // string
#include <set>
#include <queue>
#include <fstream>
#include <unordered_map>
#include <map>
#define vec vector
#define NEK 1000000000000000000
#define For(i,n) for(ll i = 0; i < n; i++)
#define ll long long
#define pii pair<int,int>
#define int ll
#define mod 998244353
using namespace std;
void solve(){
int n, k;
cin >> n >> k;
vec<int> a(n);
For(i, n) cin >> a[i];
vec<vec<vec<int>>> dp(n+1, vec<vec<int>>(k+1, vec<int>(2, 0)));
for(int i = n-1; i>=0; i--) {
For(j, k+1) {
//riesime dp[i][j][0]
//skipneme
dp[i][j][0] = max(dp[i][j][0], dp[i+1][j][0]);
//neskipneme
if(j != 0){
dp[i][j][0] = max(dp[i][j][0], dp[i+1][j-1][1] + a[i]);
}
//riesime dp[i][j][1]
//skipneme
dp[i][j][1] = max(dp[i][j][1], dp[i+1][j][0]);
//neskipneme
dp[i][j][1] = max(dp[i][j][1], dp[i+1][j][1] + a[i]);
}
}
//dp[i][j][0/1] som na itom policku, este mozem spravit j usekov, a predomnou niekto je/neni 1/0
cout << dp[0][k][0] << endl;
return;
}
signed main() {
int t; t = 1;
while(t--) solve();
return 0;
}