#include<iostream>
using namespace std;
/*
(烽火传递)
烽火台是重要的军事防御设施,一般建在险要处或交通要道上。
在两座城市之间有n个烽火台,每个烽火台发出信号都有一定的代价。
为了使情报准确地传递,在连续的m个烽火台中至少要有一个发出信号。
现输入n、m和每个烽火台发出信号的代价,请计算总共最少花费多少代价,才能使敌军来袭之时,情报能在这两座城市之间准确传递。
例如,有5个烽火台,它们发出信号的代价依次为1,2,5,6,2,且m为3,则总共最少花费代价为4,即由第2个和第5个烽火台发出信号。
*/
//f[i]表示在当前位置发出信号,目前的所有烽火台付出的最小代价
//状态转移方程为f[i]=min(f[j])+a[i] j:i-m->i-1
int a[10005],f[10005],que[10005];
int head,tail;
int n,m,ans;
int main(){
cin>>n>>m;
head=tail=0;
f[0]=0;
for(int i=1;i<=n;i++)cin>>a[i];
for(int i=1;i<=n;i++){
while(head<=tail&&que[head]<i-m)head++;
f[i]=a[i]+f[que[head]];
while(head<=tail&&f[que[tail]]>f[i])tail--;
que[++tail]=i;
}
ans=0x7fffffff;
for(int i=n-m+1;i<=n;i++)
ans=min(ans,f[i]);
cout<<ans;
return 0;
}