#include <iostream>
#include <queue>
#include <cstdio>
#include <cstring>
#define MAX_N 1000000
#define MAX_Q 100000
using namespace std;
typedef pair<int, int> P; //番号, 匹数
int ary[MAX_N + 1];
int n, q;

//比較関数は、通常とは逆になる
//昇順にしようと思っていたのに降順になっていた・・・
struct Greater {
    bool operator() (const P a, const P b) {
        if(a.first == b.first) { //匹数が同じなら
            return(a.second > b.second); //番号を昇順に
        }
        return(a.first < b.first); //同じでなければ匹数の降順に
    }
};
priority_queue<P, vector<P>, Greater> data;

//キューのデータをクリアする
void clear() {
    while(!data.empty()) data.pop();
}
void update(int no, int point) {
    ary[no] += point; //更新
    if(data.size() > 0) clear(); //キューのデータ全消し
    //データを再度入れる
    for(int r = 1; r <= n; r++) {
        data.push(P(ary[r], r));
        printf("data updated: %d, %d\n", r, ary[r]);
    }
}


int main(void) {
    cin >> n >> q;
    //initialize
    memset(ary, 0, sizeof(ary));
    
    for(int r = 0; r < q; r++) {
        int no, point; cin >> no >> point;
        update(no, point);
        P top = data.top(); printf("%d %d\n", top.second, top.first);
    }
    return(0);
}