1 #include<bits/stdc++.h>
2 #define N 400010
3 using namespace std;
4 int n,m,tot,len,mx,id[N>>1],f[N<<1],hd[N<<1];
5 int t,q[N<<1],ans[N],b[N],l[N>>1],r[N>>1];
6 struct edge{int v,next;}e[N<<1];
7 void cmax(int &x,int y){if(y>x)x=y;}
8 void adde(int u,int v){
9 e[++tot].v=v;
10 e[tot].next=hd[u];
11 hd[u]=tot;
12 }
13 void dfs(int u){
14 q[++t]=u;
15 if(u<=len)for(int i=mx;;i++)
16 if(q[t-i]>=u+len){ans[u]=i;break;}
17 for(int i=hd[u];i;i=e[i].next)dfs(e[i].v);
18 --t;
19 }
20 int main(){
21 scanf("%d%d",&n,&m);m=0;
22 for(int i=1;i<=n;i++)
23 scanf("%d%d",&l[i],&r[i]),
24 b[++m]=l[i],b[++m]=r[i];
25 sort(b+1,b+1+m);
26 len=unique(b+1,b+1+m)-b-1;int x,y;
27 //int len=m,x,y;
28 for(int i=1;i<=n;i++){
29 id[i]=x=lower_bound(b+1,b+1+len,l[i])-b;
30 y=lower_bound(b+1,b+1+len,r[i])-b;
31 if(x<y)cmax(f[x],y),cmax(f[x+len],y+len);
32 else cmax(f[1],y),cmax(f[x],y+len),cmax(f[x+len],len<<1);
33 }
34 for(int i=1;i<=len<<1;i++)cmax(f[i],f[i-1]);
35 //for(int i=1;i<=len<<1;i++)printf("%d ",f[i]);puts("");
36 for(int i=1;i<len<<1;i++)adde(f[i],i);
37 for(int i=1;i<=len;i=f[i])++mx;--mx;
38 dfs(len<<1);
39 for(int i=1;i<=n;i++)printf("%d ",ans[id[i]]);
40 return 0;
41 }