#include<cstdio>
#include<algorithm>
using namespace std;
const int maxn=2e5+7;
#define FOR(i,l,r) for(int i=l;i<=r;i++)
#define DOR(i,r,l) for(int i=r;i>=l;i--)
typedef long long ll;
struct soilder{
int id;
ll l,r;
inline void init(int i,ll a,ll b){
id=i;
l=a;
r=b;
}
}sd[maxn<<1];
bool cmp(soilder a,soilder b){
return a.l<b.l;
}
int go[maxn<<1][21],n,m,ans[maxn],c,d;
int main(){
scanf("%d%d",&n,&m);
FOR(i,1,n){
scanf("%d%d",&c,&d);
if(c>d)
d+=m;
sd[i].init(i,ll(c),ll(d));
}
sort(sd+1,sd+1+n,cmp);
int n2=n<<1;
FOR(i,1,n){
sd[i+n]=sd[i];
sd[i+n].r+=m;
sd[i+n].l+=m;
}
int p=1;
FOR(i,1,n2){
while(sd[p].l<=sd[i].r&&p<=n2)
p++;
go[i][0]=p-1;
}
FOR(j,1,19)
FOR(i,1,n2)
if(i+(1<<j)<=n)
go[i][j]=go[go[i][j-1]][j-1];
FOR(i,1,n){
ll cur=i;
ll ed=sd[i].l+m;
ans[sd[i].id]=2;
DOR(j,19,0){
if(sd[go[cur][j]].id&&sd[go[cur][j]].r<ed){
ans[sd[i].id]+=1<<j;
cur=go[cur][j];
}
}
}
FOR(i,1,n)
printf("%d ",ans[sd[i].id]);
return 0;
}
全WA,望有dalao帮忙纠正:)