// 优先队列+反向查询
#include <algorithm>
#include <functional>
#include <iostream>
#include <queue>
#include <vector>
using namespace std;

int main() {
    int n, k, a;
    long long total_time = 0, save_time = 0;
    vector<long long> v;
    cin >> n >> k;
    while(n--) {
        cin >> a;
        v.push_back(a);
        total_time += a;
    }
    if(k == 1){
        cout << v[0];
        return 0;
    }
    priority_queue<long long> pq;
    for(int i = v.size() - 1; i >= 0; --i) {
        if((i + 1) % k == 0 && !pq.empty()) {
            save_time += pq.top();
            pq.pop();
        } 
        pq.push(v[i]);
    }
    cout << total_time - save_time;
}
// 64 位输出请用 printf("%lld")