// Readiz lesson: complete C++17 local exercise.
namespace hc {
struct HeapItem { long long key; int id; };
bool heapBefore(const HeapItem& a, const HeapItem& b) {
    return a.key < b.key || (a.key == b.key && a.id < b.id);
}
template<int CAP> struct MinHeap {
    static_assert(CAP > 0, "positive capacity required");
    HeapItem data[CAP + 1]; // 1-index, 0번 칸은 사용하지 않는다.
    int size;
    void clear() { size = 0; }
    bool push(long long key, int id) {
        if (size == CAP) return false;
        HeapItem item = {key, id};
        int i = ++size;
        while (i > 1 && heapBefore(item, data[i / 2])) {
            data[i] = data[i / 2];
            i /= 2;
        }
        data[i] = item;
        return true;
    }
    bool top(HeapItem& out) const {
        if (size == 0) return false;
        out = data[1];
        return true;
    }
    bool pop(HeapItem& out) {
        if (size == 0) return false;
        out = data[1];
        HeapItem last = data[size--];
        if (size == 0) return true;
        int i = 1;
        while (i * 2 <= size) {
            int child = i * 2;
            if (child < size && heapBefore(data[child + 1], data[child])) ++child;
            if (!heapBefore(data[child], last)) break;
            data[i] = data[child];
            i = child;
        }
        data[i] = last;
        return true;
    }
};
}

const int MAX_TOP_K = 200000;
hc::MinHeap<MAX_TOP_K> topKHeap;

bool topKSums(const int values[], int n, int k, long long result[]) {
    if (n < 0 || n > MAX_TOP_K || k < 0 || k > n) return false;
    topKHeap.clear();
    long long sum = 0;

    for (int i = 0; i < n; ++i) {
        if (!topKHeap.push(values[i], i)) return false;
        sum += values[i];
        if (topKHeap.size > k) {
            hc::HeapItem removed;
            topKHeap.pop(removed);
            sum -= removed.key;
        }
        result[i] = sum;
    }
    return true;
}
#include <iostream>
#include <vector>
int main() {
    std::ios::sync_with_stdio(false); std::cin.tie(nullptr);
    int n,k;
    if (!(std::cin>>n>>k) || n<1 || n>MAX_TOP_K || k<0 || k>n) return 1;
    std::vector<int> values(n); std::vector<long long> result(n);
    for (int &v:values) if (!(std::cin>>v) || v < -1000000000 || v > 1000000000) return 1;
    if (!topKSums(values.data(),n,k,result.data())) return 1;
    for (auto sum:result) std::cout<<sum<<'\n';
    return 0;
}
