#include<stdio.h>
const int MAXN = 100000 + 10;
class Node {
int s; //值。
int i; //下标。
public:
Node() {}
Node(int i, int s) : i(i), s(s) {}
~Node() {}
int visi() {return this->i;}
int viss() {return this->s;}
}que[MAXN];
int s[MAXN];
int main()
{
int n, m;
while(scanf("%d %d", &n, &m) != EOF) {
s[0] = 0;
for(int i = 1; i <= n; i++) {
scanf("%d", &s[i]);
s[i] += s[i-1];
}
int ans = s[1];
Node *fr = new Node; //队列头指针。
Node *ta = new Node; //队列尾指针。
fr = ta = que;
que[0] = Node(0, 0);
for(int i = 2; i <= n; i++) {
while(fr<=ta && (*fr).visi() < i-m) fr++;
while(fr<=ta && (*ta).viss() >= s[i-1]) ta--;
ta++;
*ta = Node(i-1, s[i-1]);
int t = s[i] - (*fr).viss();
if(ans < t) ans = t;
}
printf("%d\n",ans);
}
return 0;
}