#include <fstream>
#include <cstdlib>
#include <vector>
using namespace std;
fstream 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);
int damiSpate(vector <int> &nums, int &fata, int &spate);
void scoateSpate(vector <int> &nums, int &fata, int &spate);
long long sum;
vector <int> dichiu, numere;
int nrElDq, nrElem, lSubsir, i, fata, spate, k, cuc, banana;
bool adaugat = 0;
int main()
{
fin >> nrElem >> lSubsir;
dichiu.assign(lSubsir, 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;
if (nrElem == 1)
{
fout << numere[0];
return 0;
}
if (lSubsir == 1)
{
for (i = 0; i < nrElem; i++)
sum += numere[i];
fout << sum;
return 0;
}
for (i = 1; i <nrElem; i++)
{
if (i == 7)
banana = numere[i];
cuc = numere[damiFata(dichiu, fata, spate)];
adaugat = 0;
if (k == lSubsir)
{
cuc = numere[damiFata(dichiu, fata, spate)];
if (damiFata(dichiu, fata, spate) == i-k)
scoateFata(dichiu, fata, spate);
cuc = numere[damiFata(dichiu, fata, spate)];
}
else
k++;
if (numere[i] < numere[damiFata(dichiu, fata, spate)])
{
while (numere[i] < numere[damiFata(dichiu, fata, spate)])
{
cuc = numere[damiFata(dichiu, fata, spate)];
scoateFata(dichiu, fata, spate);
if (nrElDq == 0)
break;
}
adaugSpate(dichiu, i, fata, spate);
cuc = numere[damiFata(dichiu, fata, spate)];
}
else
{
while (numere[i] < numere[damiSpate(dichiu, fata, spate)])
scoateSpate(dichiu, fata, spate);
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++;
}
void scoateSpate(vector <int> &nums, int &fata, int &spate)
{
nums[spate] = 0;
spate++;
if (spate == nums.size())
spate = 0;
nrElDq--;
}
int damiFata(vector <int> &nums, int &fata, int &spate)
{
return nums[fata];
}
int damiSpate(vector <int> &nums, int &fata, int &spate)
{
return nums[spate];
}