#include<stdio.h>
#include<stdlib.h>
#define MAXN 100000
typedef struct{
    int data[MAXN];
    int size;
}MiniHeap;
void swap(int *a,int *b){
    int t=*a;
    *a=*b;
    *b=t;
}
void heapifyUp(MiniHeap *h,int i){
    if(i==0)return;
    intparent=(i-1)/2;
    if(h->data)[i]<h->data[parent]){
        swap(&h->data[i],&h->data[parent]);
        heapifyUp(h,parent);
    }
}
void heapifyDown(MiniHeap *h,int i){
    int left=2 * i + 1,right=2 * i + 2,smallest = i;
    if(left < h->size&& 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(MiniHeap *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\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;
}