#include <fstream>
#include <cstdlib>
#include <vector>
using namespace std;
ifstream fin("deque.in");
ofstream fout("deque.out");
void adaugFata(vector <int> & nums, int nr, int &fata, int &spate);
void scoateFata(vector <int> &nums, int &fata, int &spate);
void adaugSpate(vector <int> & nums, int nr, int &fata, int &spate);
int damiFata(vector <int> &nums, int &fata, int &spate);
long long sum;
vector <int> dichiu, numere;
int nrElDq, nrElem, lSubsir, i, fata, spate, k, cuc;
bool adaugat = 0;
int main()
{
fin >> nrElem >> lSubsir;
dichiu.assign(lSubsir+5, 0);
numere.assign(nrElem, 0);
fata = -1;
spate = 0;
for (i = 0; i < nrElem; i++)
fin >> numere[i];
adaugFata(dichiu, 0, fata, spate);
k = 1;
for (i = 1; i <nrElem; i++)
{
adaugat = 0;
if (k == lSubsir)
{
if (damiFata(dichiu, fata, spate) == i-k)
scoateFata(dichiu, fata, spate);
}
else
k++;
if (numere[i] < numere[damiFata(dichiu, fata, spate)])
{
while (numere[i] < numere[damiFata(dichiu, fata, spate)])
{
scoateFata(dichiu, fata, spate);
if (nrElDq == 0)
break;
}
adaugSpate(dichiu, i, fata, spate);
}
else
adaugSpate(dichiu, i, fata, spate);
if (k == lSubsir)
sum += numere[damiFata(dichiu, fata, spate)];
}
fout << sum;
return 0;
}
void adaugFata(vector <int> & nums, int nr, int& fata, int& spate)
{
fata++;
if (fata == nums.size())
fata = 0;
nums[fata] = nr;
nrElDq++;
}
void scoateFata(vector <int> &nums, int &fata, int &spate)
{
nums[fata] = 0;
fata--;
if (fata < 0)
fata = nums.size()-1;
nrElDq--;
}
void adaugSpate(vector <int> & nums, int nr, int &fata, int &spate)
{
spate--;
if (spate < 0)
spate = nums.size()-1;
nums[spate] = nr;
nrElDq++;
}
int damiFata(vector <int> &nums, int &fata, int &spate)
{
return nums[fata];
}