#include<bits/stdc++.h>
#define ll long long
#define ld long double
#define pb push_back
#define pii pair<int, int>
#define fi first
#define se second
#define bit(i, x) ((x >> i) & 1)
#define SZ(x) ((int)(x.size()))
#define FOR(i, a, b) for (int i = (a); i <= (b); ++i)
#define FORD(i, a, b) for (int i = (a); i >= (b); --i)
#define task "test"
#define int long long

using namespace std;


mt19937 rd(chrono::steady_clock::now().time_since_epoch().count());
ll rand(ll l, ll r) { assert(l <= r); return uniform_int_distribution<ll>(l, r)(rd); }

const int MAXn = 5e5 + 5;
const ll MOD = 1e9 + 7;
const ll oo = LLONG_MAX;
const int BASE = 3137;
const int BL = 320;

int n,k,a[MAXn],dp[MAXn],res;

struct SegmentTree{
    int N,it[MAXn*4];
    void init(int n){
        N=n;
        for(int i=0;i<=N*4;i++){
            it[i]=0;
        }
    }
    void upd(int idx,int l,int r,int u,int v){
        if (l>u||r<u)return;
        if (l==r){
            it[idx]=v;
            return;
        }
        int mid=(l+r)>>1;
        upd(idx<<1,l,mid,u,v);
        upd(idx<<1|1,mid+1,r,u,v);
        it[idx]=max(it[idx<<1],it[idx<<1|1]);
    }
    int get(int idx,int l,int r, int u, int v){
        if (l>v||r<u)return -oo;
        if (l>=u&&r<=v)return it[idx];
        int mid =(l+r)>>1;
        return max(get(idx<<1,l,mid,u,v),get(idx<<1|1,mid+1,r,u,v));
    }
    void update(int u,int v){upd(1,0,N,u,v);}
    int query(int u,int v){return get(1,0,N,u,v);}
}st;

void solution() {
    cin>>n>>k;
    for(int i=1;i<=n;i++){cin>>a[i],a[i]+=a[i-1];}
    st.init(n);
    for (int i=0;i<k&&i<=n;i++){
        dp[i]=a[i]-a[i+1];
        res=max(res,dp[i]);
        st.update(i,dp[i]);
    }
    for (int i=k;i<=n;i++){
        dp[i]=st.query(i-k,i-2)+a[i];
        res=max(res,dp[i]);
        st.update(i,dp[i]-a[i+1]);
    }
    cout<<res;
}

//dp[i]=dp[j] + sum(j+2->i) (j<i-1)

int32_t main() {
    if (fopen(task".inp", "r")) { freopen(task".inp", "r", stdin); freopen(task".out", "w", stdout); }
    ios::sync_with_stdio(0); cin.tie(0);
    int ntest = 1; //cin >> ntest;
    while (ntest--) solution();
    cerr << "\n" << 1.0 * clock() / CLOCKS_PER_SEC << "s ";
}
