#include<iostream> #include<cstdio> #define int long long
usingnamespacestd;
constint maxn = 500005 * 2; structnode {int val, pos; } q[maxn]; int a[maxn], s[maxn], m, n;
signedmain(){ cin >> n >> m; for (int i = 1; i <= n; i ++) { cin >> a[i]; s[i] = s[i - 1] + a[i]; } for (int i = n + 1; i <= m + n; i ++) s[i] = s[n]; int head = 0, tail = 0; int ans = -8e18; // max --> decrease for (int i = 1; i <= n + m; i ++) { while (head < tail && s[i] >= q[tail - 1].val) tail --; q[tail ++] = (node) { s[i], i }; while (head < tail && i - q[head].pos + 1 > m) head ++; ans = max(ans, q[head].val - s[(i - m >= 0) ? i - m : 0]); } cout << ans << endl; return0; }