#include <iostream>
#include <cstdio>
#include <cstring>
#define fuck cout << "wtf???\n"
using namespace std;
int n, m;
int heap[50];
void heap_adjust(int x) //这是向下调整函数
{
int temp = heap[x];
for(int i = x * 2; i <= m; i *= 2)
{
if(i < m && heap[i] > heap[i + 1])
i++;
if(temp < heap[i])
break;
heap[x] = heap[i];
x = i;
}
heap[x] = temp;
}
//建的是小根堆,与大根堆原理一样
void Build_heap()
{
for(int i = m / 2; i >= 1; i --)
{
heap_adjust(i);
}
}
void heap_sort()
{
for(int i = m; i >= 1; i --)
{
swap(heap[1], heap[i]);
m = i - 1;
heap_adjust(1);
}
}
int main()
{
//freopen("in.txt", "r", stdin);
cin >> n >> m;
for(int i = 1; i <= m; ++ i)
{
scanf("%d", &heap[i]);
}
Build_heap();
int x;
for(int i = m + 1; i <= n; ++ i)
{
scanf("%d", &x);
if(heap[1] < x)
{
heap[1] = x;
heap_adjust(1);
}
}
int cnt = m;
heap_sort();
for(int i = 1; i <= cnt; ++ i)
{
if(i == 1) cout << heap[i];
else cout << ' ' << heap[i];
}
cout << endl;
return 0;
}