#include<bits/stdc++.h>
#define mp make_pair
using namespace std;
typedef pair<int, int> pii;

class RMQ{
  int n;
  vector<pii> dat;
public:
  RMQ(int n_){
    init(n_);
  }
  void init(int n_);
  void update(int k, int a);
  pii query(int a, int b, int k = 0, int l = 0, int r = 0);
};
void RMQ::init(int n_){
  n = 1;
  while(n < n_)n *= 2;
  dat.resize(2*n - 1);
  for (int i = 0; i < 2*n - 1; i++) {
    if(n_ + n - 2 <= i || i < n - 1) dat[i] = mp(-1e9, -1e9);
    else dat[i] = mp(0, -i + n - 1); 
  }
}

void RMQ::update(int k, int a){
  k += n - 1;
  dat[k].first += a;
  while(k > 0){
    k = (k - 1)/2;
    dat[k] = max(dat[2*k + 1], dat[2*k + 2]);
  }
}

pii RMQ::query(int a, int b, int k, int l, int r){
  if(r <= l)r = n;
  if(r <= a || b <= l)return mp(-1e9, -1e9);
  if(a <= l && r <= b)return dat[k];
  pii vl = query(a, b, 2*k + 1, l, (r + l)/2);
  pii vr = query(a, b, 2*k + 2, (r + l)/2, r);
  return max(vl, vr);
}
int main(int argc, char *argv[]){
  int n, p, a, v;
  cin >> n >> p;
  RMQ segtree(n);
  for (int i = 0; i < p; i++) {
    scanf("%d %d", &a, &v);
    segtree.update(a - 1, v);
    pii ans = segtree.query(0, n - 1);
    printf("%d %d\n", -ans.second + 1, ans.first);
  }

  return 0;
}