#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int, int> ii;
const int INF = 1e9;
const ll LINF = 1e18;
template<typename T>
bool maximize(T& a, const T& b) {
if (b < a) return false;
a = b;
return true;
}
const int N = 1e5 + 5;
int n, k;
int a[N];
ll seg[4 * N];
void update(int id, int l, int r, int pos, ll val) {
if (l > pos || r < pos) return;
maximize(seg[id], val);
if (l == r) return;
int mid = (l + r) >> 1;
update(id * 2, l, mid, pos, val);
update(id * 2 + 1, mid + 1, r, pos, val);
}
ll getMax(int id, int l, int r, int u, int v) {
if (l > v || r < u) return -LINF;
if (u <= l && r <= v) return seg[id];
int mid = (l + r) >> 1;
return max(getMax(id * 2, l, mid, u, v), getMax(id * 2 + 1, mid + 1, r, u, v));
}
ll dp[N]; // dp[i] = Số tiền nhiều nhất kiếm được nếu bắt đầu chọn từ hộp thứ i
int main() {
ios::sync_with_stdio(0); cin.tie(0);
cin >> n >> k;
for (int i = 1; i <= n; i++) cin >> a[i];
// for (int i = n; i >= 1; i--) {
// dp[i] = a[i];
// for (int j = i + 1; j <= min(n, i + k); j++) {
// maximize(dp[i], a[i] + dp[j]);
// }
// }
for (int i = n; i >= 1; i--) {
// chỉ chọn duy nhất hộp i
dp[i] = a[i];
// chọn hộp i cùng một số hộp khác ở phía sau
maximize(dp[i], a[i] + getMax(1, 1, n, i + 1, min(n, i + k)));
update(1, 1, n, i, dp[i]);
}
ll ans = 0;
for (int i = 1; i <= n; i++) maximize(ans, dp[i]);
cout << ans << '\n';
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+IAp1c2luZyBuYW1lc3BhY2Ugc3RkOyAgCgp0eXBlZGVmIGxvbmcgbG9uZyBsbDsgIAp0eXBlZGVmIHBhaXI8aW50LCBpbnQ+IGlpOyAgCgpjb25zdCBpbnQgSU5GID0gMWU5OyAgCmNvbnN0IGxsIExJTkYgPSAxZTE4OyAgCgp0ZW1wbGF0ZTx0eXBlbmFtZSBUPgpib29sIG1heGltaXplKFQmIGEsIGNvbnN0IFQmIGIpIHsKCWlmIChiIDwgYSkgcmV0dXJuIGZhbHNlOyAKCWEgPSBiOyAKCXJldHVybiB0cnVlOyAKfQoKY29uc3QgaW50IE4gPSAxZTUgKyA1OyAKCmludCBuLCBrOyAKaW50IGFbTl07IAoKbGwgc2VnWzQgKiBOXTsgIAoKdm9pZCB1cGRhdGUoaW50IGlkLCBpbnQgbCwgaW50IHIsIGludCBwb3MsIGxsIHZhbCkgewoJaWYgKGwgPiBwb3MgfHwgciA8IHBvcykgcmV0dXJuOyAgCgoJbWF4aW1pemUoc2VnW2lkXSwgdmFsKTsgICAKCWlmIChsID09IHIpIHJldHVybjsgIAoKCWludCBtaWQgPSAobCArIHIpID4+IDE7IAoJdXBkYXRlKGlkICogMiwgbCwgbWlkLCBwb3MsIHZhbCk7IAoJdXBkYXRlKGlkICogMiArIDEsIG1pZCArIDEsIHIsIHBvcywgdmFsKTsgCn0KCmxsIGdldE1heChpbnQgaWQsIGludCBsLCBpbnQgciwgaW50IHUsIGludCB2KSB7CglpZiAobCA+IHYgfHwgciA8IHUpIHJldHVybiAtTElORjsgCgoJaWYgKHUgPD0gbCAmJiByIDw9IHYpIHJldHVybiBzZWdbaWRdOyAgCgoJaW50IG1pZCA9IChsICsgcikgPj4gMTsgCglyZXR1cm4gbWF4KGdldE1heChpZCAqIDIsIGwsIG1pZCwgdSwgdiksIGdldE1heChpZCAqIDIgKyAxLCBtaWQgKyAxLCByLCB1LCB2KSk7IAp9CgpsbCBkcFtOXTsgLy8gZHBbaV0gPSBT4buRIHRp4buBbiBuaGnhu4F1IG5o4bqldCBraeG6v20gxJHGsOG7o2MgbuG6v3UgYuG6r3QgxJHhuqd1IGNo4buNbiB04burIGjhu5lwIHRo4bupIGkgCgppbnQgbWFpbigpIHsKCWlvczo6c3luY193aXRoX3N0ZGlvKDApOyBjaW4udGllKDApOyAgCQoJY2luID4+IG4gPj4gazsgCglmb3IgKGludCBpID0gMTsgaSA8PSBuOyBpKyspIGNpbiA+PiBhW2ldOyAKCgkvLyBmb3IgKGludCBpID0gbjsgaSA+PSAxOyBpLS0pIHsKCS8vIAlkcFtpXSA9IGFbaV07ICAKCS8vIAlmb3IgKGludCBqID0gaSArIDE7IGogPD0gbWluKG4sIGkgKyBrKTsgaisrKSB7CgkvLyAJCW1heGltaXplKGRwW2ldLCBhW2ldICsgZHBbal0pOyAKCS8vIAl9IAoJLy8gfQoKCWZvciAoaW50IGkgPSBuOyBpID49IDE7IGktLSkgewoJCS8vIGNo4buJIGNo4buNbiBkdXkgbmjhuqV0IGjhu5lwIGkgCgkJZHBbaV0gPSBhW2ldOyAgCgkJCgkJLy8gY2jhu41uIGjhu5lwIGkgY8O5bmcgbeG7mXQgc+G7kSBo4buZcCBraMOhYyDhu58gcGjDrWEgc2F1CgkJbWF4aW1pemUoZHBbaV0sIGFbaV0gKyBnZXRNYXgoMSwgMSwgbiwgaSArIDEsIG1pbihuLCBpICsgaykpKTsgCgkJCgkJdXBkYXRlKDEsIDEsIG4sIGksIGRwW2ldKTsgCgl9CgoJbGwgYW5zID0gMDsgICAKCWZvciAoaW50IGkgPSAxOyBpIDw9IG47IGkrKykgbWF4aW1pemUoYW5zLCBkcFtpXSk7IAoKCWNvdXQgPDwgYW5zIDw8ICdcbic7IAp9Cg==