#include<iostream>
#include<vector>
#include<algorithm>

using namespace std;

class MaxHeap{
public:

    MaxHeap(vector<int> vec, int k){
        data = new int[k];
        size = k;

        for(int i=0;i<k;i++)
            data[i]=0;

        for(int i=0;i<k;i++){
            data[i]=vec[i];
            shiftUp(i);
        }

        for(int i=k;i<vec.size();i++){
            if(vec[i]>data[0])
                continue;

            data[0]=vec[i];
            shiftDown(0);

        }

    }

    int extractMax(){
        int max=data[0];
        data[0]=data[size-1];
        shiftDown(0);
        size--;
        return max;
    }

    void printHeap(){
        vector<int> out;
        for(int i=0;i<size;i++)
            out.push_back(data[i]);

        sort(out.begin(),out.end());

        for(int i=0;i<out.size();i++)
            cout<<out[i]<<" ";
        cout<<endl;
    }

    ~MaxHeap(){
        delete [] data;
        data=nullptr;
    }

private:

    void shiftUp(int i){
        while(i>0 && data[i]>data[(i-1)/2]){
            swap(data[i],data[(i-1)/2]);
            i=(i-1)/2;
        }
    }

    void shiftDown(int i){
        while(2*i+1<size){
            int j=2*i+1;
            if(j+1<size && data[j+1]>data[j])
                j=j+1;

            if(data[i]>=data[j])
                break;

            swap(data[i],data[j]);
            i=j;

        }
    }

private:
    int * data;
    int size;
};

int main(){
    int n,k,temp;
    vector<int> input;
    while(cin>>n>>k){

        input.clear();
        while(n--){
            cin>>temp;
            input.push_back(temp);
        }

        MaxHeap heap(input,k);

        heap.printHeap();

    }

    return 0;
}