#include <bits/stdc++.h>
using namespace std;
int main() {
  ios::sync_with_stdio(false);
  cin.tie(0);
  int n, k;
  cin >> n >> k;
  vector<int> A(n + 1);
  for (int i = 1; i <= n; ++i) {
    cin >> A[i];
  }
  vector<int64_t> sum(n + 1, 0);
  for (int i = 1; i <= n; ++i) {
    sum[i] = sum[i - 1] + A[i];
  }
  vector<int64_t> dpl(n + 1, 0), dpr(n + 1, 0), dp(n + 1, 0);
  deque<int> d;
  for (int i = 1; i <= n; ++i) {
    while (!d.empty() && d.front() <= i - k) {
      d.pop_front();
    }
    dpl[i] = dpl[i - 1];
    dpr[i] = dpr[i - 1];
    if (i - k >= 0) {
      dpl[i] = max(dpl[i], sum[i] - sum[i - k] + dp[i - k]);
      dpr[i] = max(dpr[i], sum[i] - sum[i - k] + dp[i - k]);
    }
    if (!d.empty()) {
      dpl[i] = max(dpl[i], sum[i] + dpl[d.back()] - sum[d.back()]);
    }
    dpr[i] = max(dpr[i], dpr[i - 1] + A[i]);
    dp[i] = max({dp[i - 1], dpl[i], dpr[i]});
    if (i - k >= 0) {
      while (!d.empty() && dpl[i] - sum[i] >= dpl[d.back()] - sum[d.back()]) {
        d.pop_back();
      }
      d.push_back(i);
    }
  }
  int64_t ans = 0;
  for (int i = 1; i <= n; ++i) {
    ans = max(ans, dpl[i]);
  }
  for (int i = 1; i + k <= n; ++i) {
    ans = max(ans, dpr[i]);
  }
  cout << ans << endl;
}
