// 优先队列+反向查询
#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")