#include <iostream>
#include <math.h>
#include <vector>
#include <string>
#include <algorithm>
#include <queue>
#include <stack>
#include <map>
#include <cstring>
#include <iomanip>
#include <set>
#include <bitset>
#include <unordered_map>
#include <random>
using namespace std;
using ll = long long;
using pii = pair<int,int>;
using piii = tuple<int,int,int>;
#define f first
#define s second
#define endl '\n'
#define all(x) begin(x),end(x)
#define m_p make_pair
int const N = 3e5+10;
int pref[N];
pii dp[N];
int n;
pii solve(int l){
pii maxi = {0,0};
dp[0] = {0,0};
for(int i{1};i <= n;i++){
dp[i] = dp[i-1];
dp[i] = max(dp[i],{maxi.f+pref[i]-l,maxi.s+1});
maxi = max(maxi,{dp[i].f-pref[i],dp[i].s});
}
return dp[n];
}
int main(){
cin >> n;
int k;cin >> k;
int sum = 0;
for(int i{1};i <= n;i++){
int g;cin >> g;
sum += max(-g,g);
pref[i] = pref[i-1]+g;
}
int l = 0;
int r = sum;
// max l such that opt >= k
// min l such that opt < k
while(l < r){
int md = l+(r-l-1)/2;
pii sv = solve(md);
if(sv.s < k) r = md;
else l = md+1;
}
l--;
if(l < 0) cout << 0;
else cout << solve(l).f+k*(l);
}