#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 heapifyUp(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]);
        heapifyUp(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&7h->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;
}