#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 0;
    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 && 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\n");
        return 0;
    }
    MinHeap heap;
    heap size = 0;
    for (int i = i; 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;
}