#include<cstdio>
#include<vector>
#include<algorithm>
#include<climits>
using namespace std;
struct data{
    int cnt,p;
    bool operator<(const data &d)const{
        return cnt<d.cnt||(cnt==d.cnt&&p>d.p);
    }
};
class Seg{
    int n;
    vector<data>dat;
public:
    void init(int n_){
        n=1;
        while(n<n_)n*=2;
        dat.resize(n*2-1);
        for(int i=0;i<n*2-1;i++){
            dat[i]=(data){0,max(0,i-n+1)};
        }
    }
    Seg(int n_=0){
        init(n_);
    }
    void update(int x,int val){
        x+=n-1;
        dat[x].cnt+=val;
        while(x){
            x=(x-1)/2;
            dat[x]=max(dat[x*2+1],dat[x*2+2]);
        }
    }
    data query(int a,int b,int k=0,int l=0,int r=-1){
        if(r==-1)r=n;
        if(a<=l&&b>=r)return dat[k];
        if(a>=r||b<=l)return (data){-1,-1};
        return max(query(a,b,k*2+1,l,(l+r)/2),query(a,b,k*2+2,(l+r)/2,r));
    }
};

int main(){
    int n,m;
    scanf("%d%d",&n,&m);
    Seg seg(n);
    for(int i=0;i<m;i++){
        int a,b;
        scanf("%d%d",&a,&b);
        a--;
        seg.update(a,b);
        data d=seg.query(0,n);
        printf("%d %d\n",d.p+1,d.cnt);
    }
    return 0;
}