#include <iostream>
#include <vector>
#include <set>
#include <map>
#include <cstring>
#include <climits>
using namespace std;

typedef pair<int,int> P;

P myMax(const P &x, const P &y){
  if(x.first == y.first && x.second < y.second ||
     x.first > y.first){
    return x;
  }
  return y;
}

const int MAX_N = 1 << 18;

int n;
P dat[2 * MAX_N - 1];

int inX[100002], inY[100002];
vector<int> t;

void init(int n_){
  n = 1;
  while(n < n_) n *= 2;
  for(int i = 0; i < 2 * n - 1; i++) dat[i] = P(INT_MIN, -1);
}

void update(int tk, int a){
  int k = tk + n - 1;
  if(dat[k].first == INT_MIN){
    dat[k] = P(a, t[tk]);
  }
  else{
    dat[k].first += a;
  }

  while(k > 0){
    k = (k - 1) / 2;
    dat[k] = myMax(dat[k * 2 + 1], dat[k * 2 + 2]);
  }
}

int main(){
  int m, q;

  while(cin >> m >> q){
    set<int> st;
    map<int,int> mp;

    for(int i = 0; i < q; i++){
      cin >> inX[i] >> inY[i];
      st.insert(inX[i]);
    }

    init(st.size());
    t.clear();

    for(set<int>::iterator iter = st.begin(); iter != st.end(); iter++){
      t.push_back(*iter);
      update(t.size() - 1, 0);
      mp[*iter] = t.size() - 1;
    }

    int firstZero = -1;

    for(int i = 1; i <= m; i++){
      if(st.find(i) == st.end()){
        firstZero = i;
        break;
      }
    }

    for(int i = 0; i < q; i++){
      update(mp[inX[i]], inY[i]);

      P ans = dat[0];

      if(ans.first <= 0 && firstZero != -1){
        ans = myMax(ans, P(0, firstZero));
      }

      cout << ans.second << " " << ans.first << endl;
    }
  }
}