#include <iostream>
#include <cstring>
#include <algorithm>
#include <queue>
using namespace std;
typedef long long LL;
typedef pair<int,int>pii;
const int mod = 1e9 + 7 , INF = 0x3f3f3f3f , N = 1e6 + 10;
struct Node
{
int l,r;
int v;
LL s;
int add;
}tr[N * 4];
int n,k;
int w[N];
void push_up(int x)
{
tr[x].v = min(tr[x << 1].v , tr[x << 1 | 1].v);
tr[x].s = tr[x << 1].s + tr[x << 1 | 1].s;
}
void push_down(int x)
{
Node &root = tr[x];
Node &left = tr[x << 1];
Node &right = tr[x << 1 | 1];
if (root.add)
{
left.add += root.add;
right.add += root.add;
left.v += root.add;
right.v += root.add;
left.s += (LL)(left.r - left.l + 1) * root.add;
right.s += (LL)(right.r - right.l + 1) * root.add;
root.add = 0;
}
}
void build(int x,int l,int r)
{
tr[x] = {l,r};
if (l == r)
{
tr[x] = {l,r,w[r],w[r],0};
return;
}
int mid = l + r >> 1;
build(x << 1,l,mid);
build(x << 1 | 1,mid + 1,r);
push_up(x);
}
void modify(int x,int l,int r,int kk)
{
if (tr[x].l >= l && tr[x].r <= r)
{
tr[x].v -= kk;
tr[x].add -= kk;
tr[x].s -= (LL)(tr[x].r - tr[x].l + 1) * kk;
return;
}
push_down(x);
int mid = tr[x].l + tr[x].r >> 1;
if (l <= mid)
modify(x << 1,l,r,kk);
if (r > mid)
modify(x << 1 | 1,l,r,kk);
push_up(x);
return;
}
int queryMin(int x,int l,int r)
{
if (tr[x].l >= l && tr[x].r <= r)
return tr[x].v;
push_down(x);
int res = INF;
int mid = tr[x].l + tr[x].r >> 1;
if (l <= mid)
res = min(res,queryMin(x << 1,l,r));
if (r > mid)
res = min(res,queryMin(x << 1 | 1,l,r));
return res;
}
LL querySum(int x,int l,int r)
{
if (tr[x].l >= l && tr[x].r <= r)
return tr[x].s;
push_down(x);
LL res = 0;
int mid = tr[x].l + tr[x].r >> 1;
if (l <= mid)
res = querySum(x << 1,l,r);
if (r > mid)
res += querySum(x << 1 | 1,l,r);
return res;
}
int main()
{
scanf("%d%d",&n,&k);
for (int i = 1 ; i <= n ; i ++)
scanf("%d",&w[i]);
build(1,1,n);
LL res = 0;
for (int i = 1 ; i <= n ; i ++)
{
int j = min(n,i + k - 1);
if (querySum(1,i,i) == 0)
continue;
int minv = queryMin(1,i,j);
if (minv > 0 && i + k - 1 <= n)
{
res += minv;
modify(1,i,j,minv);
res += querySum(1,i,i);
}
else if (minv == 0 && i + k - 1 <= n)
res += querySum(1,i,i);
else
{
res += querySum(1,i,n);
break;
}
}
printf("%lld\n",res);
return 0;
}