// 不会前缀和,看到题目即想到最短路,可以把空间折跃认为是跑到下一层,分层图dij即可

// 时间复杂度O(nlogn)

void solve() {
        ll n, k; rd(n, k);
        vector<vector<pll>> g(2 * n + 2);
        rep(i, 1, n - 1) {
            int x; rd(x);
            g[i].eb(i+1, x);
            g[n+i].eb(n+i+1, x);
        }
        rep(i, 1, n) {
            g[i].eb(max(n+1, n+i-k), 0ll);
            g[i].eb(min(2*n, n+i+k), 0ll);
        }
        priority_queue<pll, vector<pll>, greater<pll>> pq;
        vector<ll> dis(2*n + 2, INF);
        dis[1] = 0;
        pq.emplace(0, 1);
        while (!pq.empty()) {
            auto [wu, u] = pq.top(); pq.pop();
            for (auto& [v, w] : g[u]) {
                if (dis[v] > dis[u] + w) {
                    dis[v] = dis[u] + w;
                    pq.emplace(dis[v], v);
                }
            } 
        }
        println(min(dis[n], dis[2*n]));
    }