#include<bits/stdc++.h>
using namespace std;
int n,m,ans[5000003],f[5000003][33];
struct node{
int L,R;
}a[5000003];
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;
}
bool cmp(node x,node y)
{
return x.L<y.L;
}
void Do()
{
for(int i=1;i<=2*n;i++)
{
int p=i;
while(p<=2*n&&a[p].L<=a[i].R)
{
p++;
}
int p1=p-1;
f[i][0]=p1;
}
for(int j=1;j<=19;j++)
{
for(int i=1;i<=2*n;i++)
{
f[i][j]=f[f[i][j-1]][j-1];
}
}
}
void Does(int k)
{
int t=a[k].L+m,ans1=1,p=k;
for(int i=19;i>=0;i--)
{
if(f[k][i]!=0&&a[f[k][i]].R<t)
{
ans1+=(1<<i);
k=f[k][i];
}
}
printf("%d ",ans1+1);
}
main()
{
n=read();
m=read();
for(int i=1;i<=n;i++)
{
a[i].L=read();
a[i].R=read();
if(a[i].L>a[i].R)
a[i].R+=m;
}
sort(a+1,a+n+1,cmp);
for(int i=1;i<=n;i++)
{
a[i+n]=a[i];
a[i+n].L=a[i+n].L+m;
a[i+n].R=a[i+n].R+m;
}
Do();
for(int i=1;i<=n;i++)
{
Does(i);
}
return 0;
}