#include<bits/stdc++.h>
using namespace std;
const int N=500005;
long long n,k,a[N];
long long ans,lx,rx;
multiset<long long> l,r;
long long read(){
int f=1;long long k=0;
char c=getchar();
while(c<'0'||c>'9'){
if(c=='-')f=-1;
c=getchar();
}
while(c>='0'&&c<='9'){
k=k*10+c-'0';
c=getchar();
}
return f*k;
}
int main(){
n=read();k=read();
for(int i(1);i<=n;++i)a[i]=read();
for(int i(1);i<=k;++i)l.insert(a[i]),lx+=a[i];
for(int i(1);i<=k/2;++i){
//cout<<"*"<<i<<'\n';
int lar=*(--l.end());
l.erase(--l.end());
r.insert(lar);
lx-=lar,rx+=lar;
}int lar=*(--l.end());//cout<<k<<" "<<lar<<" "<<lx<<" "<<rx<<'\n';
ans=1ll*lar*l.size()-lx+rx-1ll*lar*r.size();
for(int i(k+1);i<=n;++i){
if(a[i-k]<=lar)l.erase(l.find(a[i-k])),lx-=a[i-k];
else r.erase(r.find(a[i-k])),rx-=a[i-k];
if(a[i]<=lar)l.insert(a[i]),lx+=a[i];
else r.insert(a[i]),rx+=a[i];
while(l.size()>=r.size()+2){
lar=*(--l.end());
l.erase(--l.end());
r.insert(lar);
lx-=lar,rx+=lar;
}
if(l.size())lar=*(--l.end());
while(l.size()<r.size()){
int rar=*(r.begin());
r.erase(r.begin());
l.insert(rar);
lx+=rar,rx-=rar;
lar=*(--l.end());
}
//cout<<i<<" "<<lar<<" "<<lx<<" "<<rx<<" "<<l.size()<<" "<<r.size()<<'\n';
ans=min(ans,(long long)(1ll*lar*l.size()-lx+rx-1ll*lar*r.size()));
}
printf("%lld",ans);
return 0;
}
thx qwq