/*
对于一栋楼房,它能被看到的条件是比之前的所有楼房斜率都大
本题中,记sum[k]为:仅考虑k所代表的区间,有多少满足条件的数
那么首先,sum[k]一定包含sum[k*2];
其次,属于sum[o*2]的建筑有可能挡住属于sum[k*2+1]的建筑,难点在于需求出这个数目
记 k*2 代表的区间中最大数为M,并将 k*2+1 所代表的区间分左右两段,记左段代表的区间中最大数为M2,继续讨论:
1. 若M大于等于M2,则左段全部不符合要求,递归判断右段有多少个大于M的数
2. 若M小于M2,则右段的答案不变,为sum[k*2+1]-sum[左段],递归判断左段有多少个大于M的数
*/
#include<cstdio>
#include<iostream>
#define N 100010
using namespace std;
int sum[N*4],n,m;
double mx[N*4];
int count(double M,int l,int r,int k){
if(l==r)return mx[k]>M;
int mid=l+r>>1;
if(M>=mx[k*2]) return count(M,mid+1,r,k*2+1);
else return sum[k]-sum[k*2]+count(M,l,mid,k*2);
}
void modify(int l,int r,int k,int pos,double val){
if(l==r){
mx[k]=val;sum[k]=1;
return;
}
int mid=l+r>>1;
if(pos<=mid) modify(l,mid,k*2,pos,val);
else modify(mid+1,r,k*2+1,pos,val);
mx[k]=max(mx[k*2],mx[k*2+1]);
sum[k]=sum[k*2]+count(mx[k*2],mid+1,r,k*2+1);
}
int main(){
scanf("%d%d",&n,&m);
for(int i=1;i<=m;i++){
int x,y;scanf("%d%d",&x,&y);
double val=(double)y/(double)x;
modify(1,n,1,x,val);
printf("%d\n",sum[1]);
}
return 0;
}