#include <bits/stdc++.h>
using namespace std;
const int maxn = 1e5 + 5;
int n, m, x, y;
struct node{
double maxs;
int len;
}tree[maxn << 2];
int push_up(int l, int r, int t, int v){
if(l == r)return tree[t].maxs > v;
int mid = (l + r) >> 1;
if(tree[t << 1].maxs <= v)return push_up(mid + 1, r, t << 1 | 1, v);
return push_up(l, mid, t << 1, v) + tree[t].len - tree[t << 1].len;
}
void maintain(int l, int r, int t){
tree[t].maxs = max(tree[t << 1].maxs, tree[t << 1 | 1].maxs);
int mid = (l + r) >> 1;
if(tree[t << 1].maxs >= tree[t << 1 | 1].maxs)tree[t].len = tree[t << 1].len;
else tree[t].len = tree[t << 1].len + push_up(mid + 1, r, t << 1 | 1, tree[t << 1].maxs);
}
void update(int l, int r, int q, double v, int t){
if(q < l || r < q)return;
if(l == q && q == r){
tree[t].maxs = v;
tree[t].len = 1;
return;
}
int mid = (l + r) >> 1;
update(l, mid, q, v, t << 1);
update(mid + 1, r, q, v, t << 1 | 1);
maintain(l, r, t);
}
int main(){
std::ios::sync_with_stdio(false);
std::cin.tie(0);
freopen("in.txt", "r", stdin);
cin >> n >> m;
for(int i = 1; i <= m; ++i){
cin >> x >> y;
double tmp = (double) y / x;
update(1, n, x, tmp, 1);
cout << tree[1].len << endl;
}
return 0;
}