#include<bits/stdc++.h>
#define rep(i,j,k) for(register int i(j);i!=(k+1);++i)
#define drp(i,j,k) for(register int i(j);i!=(k-1);--i)
using namespace std;
const int N=2e5+7;
struct inter {
int l,r,op;
inline bool operator < (const inter &x)const {
return l<x.l;
}
} t[N*2];
inline void read(int &x) {
x=0;
register char ch=getchar();
int w=0;
while(ch>'9'||ch<'0') {
w|=ch=='-';
ch=getchar();
}
while(ch>='0'&&ch<='9') {
x=(x<<1)+(x<<3)+(ch&15);
ch=getchar();
}
w?x=~(x-1):x;
}
int n,m;
int to[N*2][25],ans[N];
inline void init()
{
int next;
rep(i,1,2*n)
{
next=i;
while(next<=2*n&&t[next].l<=t[i].r) next++;
to[i][0]=next-1;
}
rep(i,1,20)
rep(j,1,2*n)
{
to[j][i]=to[to[j][i-1]][i-1];
}
}
inline void dfs(int num)
{
int tot=1,last=num;
drp(i,19,0)
{
if(to[last][i]!=0&&t[to[last][i]].r<t[num].l+m){
tot+=(1<<i);
last=to[last][i];
}
}
ans[t[num].op]=tot+1;
}
void search(int k)
{
int tot = 1, p = k;
for(int i = 19; i >= 0; i--) {
if(to[k][i] != 0 && t[to[k][i]].r < t[k].l + m) {
tot += (1 << i);
k = to[k][i];
}
}
ans[t[p].op] = tot+ 1;
}
int main() {
//freopen("e.in","r",stdin);
//freopen("e.out","w",stdout);
read(n);
read(m);
rep(i,1,n) {
read(t[i].l);read(t[i].r);
if(t[i].l>t[i].r) t[i].r+=m;
t[i].op=i;
}
rep(i,1,n)
{
t[i+n].op=t[i].op;
t[i+n].l=t[i].l+m;
t[i+n].r=t[i].r+m;
}
sort(t+1,t+2*n+1);
init();
rep(i,1,n) dfs(i);
rep(i,1,n-1)
printf("%d ",ans[i]);
cout<<ans[n];
return 0;
}
why 超时三组 七十分