#include<bits/stdc++.h>
using namespace std;
inline int read(){
int x=0,f=1;char ch=getchar();
while (ch<'0'||ch>'9'){if (ch=='-') f=-1;ch=getchar();}
while (ch>='0'&&ch<='9'){x=x*10+ch-48;ch=getchar();}
return x*f;
}
inline void write(int x) {
int pointer=0;
char c[41]={};
if(!x){putchar('0');putchar(' ');return;}
if(x < 0){putchar('-');x=-x;}
while(x){c[++pointer]=x%10+48;x/=10;}
while(pointer) putchar(c[pointer --]);
putchar(' ');
}
struct line{
int l,r,ind,Next[21];
};
bool cmp1(line f1,line f2){
return f1.l<f2.l;
}
bool cmp2(line f1,line f2){
return f1.ind<f2.ind;
}
line f[400001];
int n,m,a[200001],logn;
void input(){
n=read();m=read();
logn=log2(n)+1;
for(int i=1;i<=n;i++){
f[i].ind=i;
f[i].l=read();
f[i].r=read();
f[i].Next[0]=0;
if(f[i].r<f[i].l)
f[i].r+=m;
f[i+n]=f[i];
f[i+n].ind+=n;
f[i+n].l+=m;
f[i+n].r+=m;
}
}
void prepare(){
sort(f+1,f+n+1,cmp1);
for(int i=1,j=1;i<2*n;i++){
while(f[j].l<=f[i].r&&j<=2*n) j++;
f[i].Next[0]=f[j-1].ind;
}
for(int j=1;j<=logn;j++)
for(int i=1;i<=2*n;i++)
f[i].Next[j]=f[f[i].Next[j-1]].Next[j-1];
}
void print(){
sort(f+1,f+n+1,cmp2);
for(int i=1;i<=n;i++){
int x=i,res=0;
for(int j=logn;j>=0;j--)
if(f[f[x].Next[j]].r>f[i].l&&f[f[x].Next[j]].r-f[i].l<m){
x=f[x].Next[j];
res+=(1<<j);
}
write(res+1);
}
}
int main(){
input();
prepare();
print();
return 0;
}