#include #define f first #define s second #define mp make_pair #define pb push_back #define all(c) (c).begin(), (c).end() #define sqr(x) (x)*(x) #define fname "" using namespace std; typedef long long ll; const double eps = 1e-9; const double PI = acos(-1.0); const int inf = int (1e9+7); const ll INF = (ll) 8e18+7; const int mod = int (1e9+7); const int N = int (2e5+7); int n, k, a[N]; ll dp[N], t[N]; void build(int v, int tl, int tr) { if(tl == tr) { t[v] = dp[tl]; return; } int tm = (tl + tr) >> 1; build(v + v, tl, tm); build(v + v + 1, tm + 1, tr); t[v] = min(t[v + v], t[v + v + 1]); } void upd(int v, int tl, int tr, int pos, ll val) { if(tl == tr) { t[v] = val; return; } int tm = (tl + tr) >> 1; if(pos <= tm) upd(v + v, tl, tm, pos, val); else upd(v + v + 1, tm + 1, tr, pos, val); t[v] = min(t[v + v], t[v + v + 1]); } ll get(int v, int tl, int tr, int l, int r) { if(r < tl || tr < l) return INF; if(l <= tl && tr <= r) return t[v]; int tm = (tl + tr) >> 1; return min(get(v + v, tl, tm, l, r), get(v + v + 1, tm + 1, tr, l, r)); } int main () { //freopen(fname".in", "r", stdin); //freopen(fname".out", "w", stdout); ios_base::sync_with_stdio(0); cin.tie(0); cin >> n >> k; dp[0] = 0; for(int i = 1; i <= n; i ++) dp[i] = INF; for(int i = 1; i <= n; i ++) cin >> a[i]; for(int i = 1; i <= n; i ++) { dp[min(n, i + k)] = min(dp[min(n, i + k)], dp[max(0, i - k - 1)] + a[i]); } cout << dp[n] << endl; return 0; }