#include<stdio.h>
#include<stdlib.h>
#define max 10000
typedef struct {
    int data[max];
    int size;
}minheap;

void swap(int *a,int *b){
    int t=*a;
    *a=*b;
    *b=t;
}
void heapfy(minheap *h,int i){
    if(i == 0) return;
    int parent = (i-1)/2;
    if(h->data[i] < h->data[parent]){
        swap(&h->data[i],&h->data[parent]);
        heapfy(h,parent);
    }
}

void heapfi(minheap *h, int i) {
    int smallest = i;
    int left = 2 * i + 1;
    int right = 2 * i + 2;

    if (left <h->size && h->data[left] <h->data[smallest]) {
        smallest = left;
    }
    if (right <h->size && h->data[right] <h->data[smallest] ) {
        smallest = right;
    }
    if (smallest != i) {
        swap(&h->data[i], &h->data[smallest]);
        heapfi(h,smallest);
    }
}

void insert(minheap *h,int val){
    h->data[h->size] = val;
    heapfy(h,h->size);
    h->size++;
}

int extrecttmin(minheap *h){
    if(h->size <=0) return -1;
    int min = h->data[0];
    h->data[0] = h->data[--h->size];
    heapfi(h,0);
    return min;
}
int getmin(minheap *h){
    if(h->size <=0) return -1;
    return h->data[0];
}

int main(){
    int n,m;
    if(scanf("%d%d",&n,&m) !=2 || n<1 ||m<1||m>n || n>max){
        printf("Invalid input");
        return 0;
    }
    minheap heap;
    heap.size = 0;
    for(int i=0;i<n;i++){
       int val;
       if(scanf("%d",&val) !=1||val<0){
           printf("Invalid input");
           return 0;
       }
       if(heap.size <m){
           insert(&heap,val);
       }else{
           if(val > getmin(&heap)){
               extrectmin(&heap);
               insert(&heap,val);
           }
       }
       if(i>=m){
           printf("%d\n",getmin(&heap));
       }
    }
    return 0;
}