// Minimum cost to reach the final index with atmost k jumps
#include<bits/stdc++.h>
using namespace std;
#define ll long long
int main(){
ios_base::sync_with_stdio(false);
cin.tie(NULL);
ll n,k;
cin>>n>>k;
vector<ll>cost(n+1),dp(n+1);
for(int i=1;i<=n;i++)cin>>cost[i];
dp[0]=0;
for(int i=1;i<=n;i++)dp[i]=INT_MAX;
multiset<ll>s;
s.insert(dp[0]);
for(int i=1;i<=n;i++){
dp[i]=cost[i]+*s.begin();
s.insert(dp[i]);
if(i-k>=0){
s.erase(dp[i-k]);
}
}
cout<<dp[n];
return 0;
}
Ly8gTWluaW11bSBjb3N0IHRvIHJlYWNoIHRoZSBmaW5hbCBpbmRleCB3aXRoIGF0bW9zdCBrIGp1bXBzCiNpbmNsdWRlPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgojZGVmaW5lIGxsIGxvbmcgbG9uZwoKaW50IG1haW4oKXsKICAgIGlvc19iYXNlOjpzeW5jX3dpdGhfc3RkaW8oZmFsc2UpOwogICAgY2luLnRpZShOVUxMKTsKICAgIGxsIG4sazsKICAgIGNpbj4+bj4+azsKICAgIHZlY3RvcjxsbD5jb3N0KG4rMSksZHAobisxKTsKICAgIGZvcihpbnQgaT0xO2k8PW47aSsrKWNpbj4+Y29zdFtpXTsKICAgIGRwWzBdPTA7CiAgICBmb3IoaW50IGk9MTtpPD1uO2krKylkcFtpXT1JTlRfTUFYOwogICAgbXVsdGlzZXQ8bGw+czsKICAgIHMuaW5zZXJ0KGRwWzBdKTsKICAgIGZvcihpbnQgaT0xO2k8PW47aSsrKXsKICAgICAgICBkcFtpXT1jb3N0W2ldKypzLmJlZ2luKCk7CiAgICAgICAgcy5pbnNlcnQoZHBbaV0pOwogICAgICAgIGlmKGktaz49MCl7CiAgICAgICAgICAgIHMuZXJhc2UoZHBbaS1rXSk7CiAgICAgICAgfQogICAgfQogICAgY291dDw8ZHBbbl07CiAgICByZXR1cm4gMDsKfQ==