#include <bits/stdc++.h>
using namespace std;
long long n, c;
long long v[112345];
long long seg[4 * 112345];
long long com[4 * 112345];
long long fim[4 * 112345];
long long prep(long long node, long long ncom, long long nend) {
  if (seg[node] != LLONG_MAX / 4) return seg[node];
  com[node] = ncom;
  fim[node] = nend;
  if (ncom == nend) {
    seg[node] = v[ncom];
    return seg[node];
  }
  long long nmid = (ncom + nend) / 2;
  seg[node] =
      min(prep(2 * node, ncom, nmid), prep(2 * node + 1, nmid + 1, nend));
  return seg[node];
}
void prep() {
  for (long long i = 0; i <= 4 * n; i++) seg[i] = LLONG_MAX / 4;
  prep(1, 0, n - 1);
}
long long query(long long node, long long i, long long j) {
  if (j < com[node] || i > fim[node]) return LLONG_MAX / 4;
  if (i <= com[node] && j >= fim[node]) return seg[node];
  return min(query(2 * node, i, j), query(2 * node + 1, i, j));
}
long long query(long long i, long long j) { return query(1, i, j); }
long long memo[112345];
long long sumac[112345];
long long sum(long long i, long long j) {
  if (i == 0) return sumac[j];
  return sumac[j] - sumac[i - 1];
}
long long pd(long long i) {
  if (i == n) return 0;
  if (i > n) return LLONG_MAX / 4;
  long long &resp = memo[i];
  if (resp == -1) {
    resp = min(v[i] + pd(i + 1),
               sum(i, i + c - 1) - query(i, i + c - 1) + pd(i + c));
  }
  return resp;
}
int32_t main() {
  ios::sync_with_stdio(false);
  cin.tie(0);
  cin >> n >> c;
  for (long long i = 0; i < n; i++) cin >> v[i];
  prep();
  for (long long i = 0; i < n; i++) memo[i] = -1;
  sumac[0] = v[0];
  for (long long i = 1; i < n; i++) sumac[i] = sumac[i - 1] + v[i];
  cout << pd(0) << endl;
}
