#include <fstream>
#include <deque>
#define MAXN 5000001
using namespace std;
ifstream fin("deque.in");
ofstream fout("deque.out");
int v[MAXN];
int main() {
deque<int> d;
int n, k;
long long sum = 0;
fin >> n >> k;
for (int i = 1; i <= n; ++i) {
fin >> v[i];
}
for (int i = 1; i <= n; ++i) {
while (!d.empty() && v[i] <= v[d.back()]) {
d.pop_back();
}
d.push_back(i);
if (d.front() == i - k) {
d.pop_front();
}
if (i >= k) {
sum += v[d.front()];
}
}
fout << sum << "\n";
return 0;
}
/*
----------------------------------------------------------------------
// don't forget about the case where there aren't enough k numbers
while (d[pos] != MARK && d[k - 1] != MARK) {
if (d[pos] < min) {
min = d[pos];
}
if (pos == k - 1) {
d.push_back(MARK);
d.push_back(min);
d.pop_front();
min = INT_MAX;
pos = -1;
}
++pos;
}
while (d.front() != MARK) {
d.pop_front();
}
for (int i = 0; i < d.size(); ++i) {
if (d[i] != MARK) {
sum += d[i];
}
}
fout << sum;
----------------------------------------------------------------------
#include <fstream>
#include <iostream>
#define MAXN 5000001
using namespace std;
ifstream fin("deque.in");
ofstream fout("deque.out");
int v[MAXN], deq[MAXN];
int main() {
int n, k, front = 1, back = 0;
long long sum = 0;
fin >> n >> k;
for (int i = 1; i <= n; i++) {
fin >> v[i];
}
for (int i = 1; i <= n; i++) {
while (front <= back && v[i] <= v[deq[back]]) {
--back;
}
deq[++back] = i;
if (deq[front] == i - k) {
++front;
}
if (i >= k) {
sum += v[deq[front]];
}
}
cout << sum << "\n";
return 0;
}
*/