#include <bits/stdc++.h>
using namespace std;
#define int long long
typedef long long ll;
typedef long double ld;
typedef vector<int> vi;
typedef vector<ll> vll;
#define FOR(i, a) for (int i=0; i<(a); i++)
#define all(x) x.begin(), x.end()
#define gcd __gcd
#define pll pair<ll, ll>
#define pii pair<int, int>
#define fi first
#define se second
//const int dr[4] = {-1, 0, 1, 0}, dc[4] = {0, 1, 0, -1};
const int N = 3e5 + 5;
int a[N], pre[N], nxt[N];
signed main(){
ios_base::sync_with_stdio(0);
cin.tie(0);
int n, k; cin >> n >> k;
multiset<int> s;
multiset<pii> t;
int pos = 0, sum = 0;
auto add = [&](int id) -> void {
if(a[id] > 0){
++pos;
sum += a[id];
}
s.insert(a[id]);
t.insert({abs(a[id]), id});
};
auto del = [&](int id) -> void {
if(a[id] > 0){
--pos;
sum -= a[id];
}
s.erase(s.find(a[id]));
t.erase({abs(a[id]), id});
};
for(int i = 1; i <= n; ++i)
cin >> a[i];
vi v;
int sss = 0;
for(int i = 1; i <= n; ++i){
if(a[i] >= 0 && a[i - 1] >= 0){
sss += a[i];
}
else if(a[i] <= 0 && a[i - 1] <= 0){
sss += a[i];
}
else{
v.push_back(sss);
sss = a[i];
}
}
v.push_back(sss);
n = v.size();
for(int i = 1; i <= n; ++i){
a[i] = v[i - 1];
pre[i] = i - 1;
nxt[i] = i + 1;
add(i);
}
int ans = 0;
if(pos <= k) ans = sum;
while(s.size() > 1){
int id = (*t.begin()).se;
del(id);
a[id] += a[pre[id]] + a[nxt[id]];
add(id);
int l = pre[id], r = nxt[id];
if(pre[id] != 0){
del(pre[id]);
l = pre[pre[id]];
}
if(nxt[id] != n + 1){
del(nxt[id]);
r = nxt[nxt[id]];
}
pre[id] = l; nxt[l] = id;
pre[r] = id; nxt[id] = r;
if(pos <= k) ans = max(ans, sum);
}
cout << ans;
return 0;
}