#include<stdio.h>
#include<stdlib.h>
#define MAXN 100000
typedef struct{
    int data[MAXN];
    int size;
}MinHeap;
void swap(int*a,int*b){
    int t=*a;
    *a=*b;
    *b=t;
}
void heapifUp(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]);
    heapifUp(h,parent);
    }
}
void heapifyDown(MinHeap*h,int i){
    int left=2*i+1,right=2*i+2,smallest=i;
    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]);
        heapifDown(h,smallest);
    }
}
void insertHeap(MinHeap*h,int val){
    h->data[h->size]=val;
    heapifUp(h,h->size);
    h->size++;
}
int extractMin(MinHeap*h){
    if(h->size<=0)return-1;
    int min=h->data[0];
    h->data[0]=h->data[--h>size];
    heapifDown(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>MAXN){
        printf("Invalid input\n");
        return 0;
    }
    MinHeap heap;
    heap size=0;
    for(int i=1;i<=N;i++){
        int val;
        if(scanf("%d",&val)!=1||val<0){
            printf("Invalid input\n");
            return 0;
        }
        if(heap.size<M){
            insertHeap(&heap,val);
        }else{
            if(val>getMin(&heap)){
                extractMin(&heap);
                insertHeap(&heap,val);
            }
        }
        if(i>M){
            printf("%d\n",getMin(&heap));
        }
    }
    return 0;
}