//C++11
//2.00sec
//1.90sec
#include <iostream>
#include <algorithm>
#include <vector>

#define REP(i,n) for(int i=0;i<(n);i++)

using namespace std;

struct av{int a,v;};

bool operator<(const av &dat1, const av &dat2)
{
    if(dat1.v==dat2.v)
        return dat1.a>dat2.a;
    return dat1.v<dat2.v;
}


int main(void)
{
    //read input
    int n, q;
    cin >> n >> q;
    vector<int> in_a(q, 0);
    vector<int> in_v(q, 0);
    vector<av> out(q);
    REP(i,q){
        cin >> in_a[i] >> in_v[i];
    }
    //calc
    int a_max = *max_element(in_a.begin(), in_a.end());
    int a_min = *min_element(in_a.begin(), in_a.end());
    vector<av> avlst(a_max+1);
    REP(i,a_max+1){
        avlst[i].a = 0;
        avlst[i].v = 0;
    }
    //for each av
    int a = in_a[0];
    avlst[a].a = a;
    avlst[a].v = (in_v[0]>0) ? in_v[0] : 0;
    out[0] = avlst[a];
    for(int i=1;i<q;i++){
        //sum
        a = in_a[i];
        avlst[a].a = a;
        avlst[a].v += in_v[i];
        if(avlst[a].v<0) avlst[a].v = 0;
        //find max
        av av_max;
        if(in_v[i]>0){
            av_max = (out[i-1]<avlst[a]) ? avlst[a] : out[i-1];
        }
        else{
            av_max = avlst[a];
            for(int j=0;j<i;j++){
                if(av_max<avlst[in_a[j]]) av_max = avlst[in_a[j]];
            }
        }
        out[i] = av_max;
   }
    //write output
    REP(i,q){
        cout << out[i].a << " " << out[i].v << endl;
    }
    return 0;
}