#include <stdio.h>
#include <stdlib.h>

typedef struct {
    int weight;
    int trust;
} Traveler;

// Finds index of the lowest trust, breaks tie by highest weight
int find_lowest_trust_index(Traveler bridge[], int m) {
    int idx = 0;
    for (int i = 1; i < m; ++i) {
        if (bridge[i].trust < bridge[idx].trust) {
            idx = i;
        } else if (bridge[i].trust == bridge[idx].trust && bridge[i].weight > bridge[idx].weight) {
            idx = i;
        }
    }
    return idx;
}

int main() {
    int n, m;
    if (scanf("%d %d", &n, &m) != 2 || n <= 0 || m <= 0) {
        printf("Invalid input\n");
        return 0;
    }
    Traveler *bridge = (Traveler) malloc(m * sizeof(Traveler));
    int curr = 0;

    for (int i = 0; i < n; ++i) {
        int w, t;
        if (scanf("%d %d", &w, &t) != 2) {
            printf("Invalid input\n");
            free(bridge);
            return 0;
        }

        if (curr < m) {
            bridge[curr].weight = w;
            bridge[curr].trust = t;
            curr++;
        } else {
            int idx = find_lowest_trust_index(bridge, m);
            if (t > bridge[idx].trust || (t == bridge[idx].trust && w < bridge[idx].weight)) {
                bridge[idx].weight = w;
                bridge[idx].trust = t;
            }
        }

        if (curr == m) {
            // Print the lowest trust after each arrival when bridge is full
            int idx = find_lowest_trust_index(bridge, m);
            printf("%d %d\n", bridge[idx].weight, bridge[idx].trust);
        }
    }
    free(bridge);
    return 0;
}