#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]);
        heapifyDown(h,smallest);
    }
}
void insertHeap(MinHeap *h,int val){
    h->data[h->size]=val;
    heapifyUp(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];
    heapifyDown(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");
        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"){
                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;
    }
}