#include <bits/stdc++.h>
using namespace std;
int v[100001];
pair <int,int> s[100001];
int aint[400001];
map <int,int> mapa;
void add(int nod,int st,int dr,int i,int x)
{
if(st==dr)
{
aint[nod]+=x;
return ;
}
int mid=(st+dr)/2;
if(i<=mid)
add(2*nod,st,mid,i,x);
else
add(2*nod+1,mid+1,dr,i,x);
aint[nod]=aint[2*nod]+aint[2*nod+1];
return ;
}
int query(int nod,int st,int dr,int k)
{
if(st==dr)
{
return st;
}
int mid=(st+dr)/2;
if(aint[2*nod]>=k)
return query(2*nod,st,mid,k);
else
return query(2*nod+1,mid+1,dr,k-aint[2*nod]);
}
int main()
{
int n,k,i,ct,j,z;
long long rez=0;
freopen("pikachu.in","r",stdin);
freopen("pikachu.out","w",stdout);
scanf("%d%d",&n,&k);
for(i=1; i<=n; i++)
{
scanf("%d",&s[i].first);
s[i].second=i;
}
sort(s+1,s+1+n);
for(i=1,ct=1; i<=n; ct++)
{
j=i;
while(j<=n && s[j].first==s[i].first)
{
v[s[j].second]=ct;
mapa[ct]=s[j].first;
j++;
}
i=j;
}
for(i=1; i<=k; i++)
add(1,1,ct,v[i],1);
z=query(1,1,ct,(k+1)/2);
rez+=mapa[z];
for(i=k+1; i<=n; i++)
{
add(1,1,ct,v[i-k],-1);
add(1,1,ct,v[i],1);
z=query(1,1,ct,(k+1)/2);
rez+=mapa[z];
}
printf("%lld",rez);
return 0;
}