#include #define ll long long #define mod 1000000007 #define upperlimit 1000100 #define INF 1000000100 #define INFL 1000000000000000100 #define eps 1e-8 #define endl '\n' #define sd(n) scanf("%d",&n) #define slld(n) scanf("%lld",&n) #define pd(n) printf("%d",n) #define plld(n) printf("%lld",n) #define pds(n) printf("%d ",n) #define pllds(n) printf("%lld ",n) #define pdn(n) printf("%d\n",n) #define plldn(n) printf("%lld\n",n) #define REP(i,a,b) for(i=a;i<=b;i++) #define mp make_pair #define pb push_back #define pcc pair #define pii pair #define pll pair #define vi vector #define vl vector #define tr(container,it) for(typeof(container.begin()) it=container.begin();it!=container.end();it++) #define F first #define S second using namespace std; ll gcd(ll n1,ll n2){ if(!n1)return n2; if(!n2)return n1; if(n1%n2==0)return n2; return gcd(n2,n1%n2); } ll powmod(ll base,ll exponent) { base%=mod; ll ans=1; while(exponent){ if(exponent&1)ans=(ans*base)%mod; base=(base*base)%mod; exponent/=2; } ans%=mod; return ans; } ll arr[upperlimit+1]; ll dp[upperlimit+1]; int main() { int i,j,n,k; sd(n); sd(k); ll answer=INFL; for(i=1;i<=n;i++)slld(arr[i]); if(n<=k+1){ for(i=1;i<=n;i++)answer=min(answer,arr[i]); } else{ for(i=1;i<=n;i++)dp[i]=INFL; dp[1]=arr[1]; for(i=2;i<=k+1;i++)dp[i]=min(dp[i-1],arr[i]); for(i=k+2;i<=n;i++){ for(j=i;j>=i-k;j--)dp[i]=min(dp[i],dp[max(0,j-k-1)]+arr[j]); } answer=dp[n]; } plldn(answer); return 0; }