#include <bits/stdc++.h>
using namespace std;
struct zs {
int c, d, id;
};
const int N = 2e5 + 7, LogN = log2(2e5 + 7);
bool cmp(zs x, zs y) {
return x.c < y.c;
}
int n, m;
zs a[N << 1];
int st[N][LogN];
void zinit() {
for (int i = 1, j = 1; i <= n; i++) {
while (j <= n && a[j].c <= a[i].d) j++;
st[i][0] = j - 1;
}
for (int j = 1; (1 << j) <= n / 2; j++) {
for (int i = 1; i <= n; i++) {
st[i][j] = st[st[i][j - 1]][j - 1];
}
}
}
int anss[N];
void getans(int x) {
int now = x;
int len = a[now].c + m, ans = 0;
for (int i = log2(N * 2); i >= 0; i--) {
int pos = st[now][i];
if (pos && a[pos].d < len) {
now = pos;
ans += 1 << i;
}
}
anss[a[x].id] = ans + 1;
}
int main() {
cin >> n >> m;
for (int i = 1; i <= n; i++) {
a[i].id = i;
cin >> a[i].c >> a[i].d;
if (a[i].c > a[i].d) a[i].c += m;
}
sort(a + 1, a + 1 + n, cmp);
for (int i = 1; i <= n; i++) {
a[i + n] = a[i];
a[i + n].c += m;
a[i + n].d += m;
}
n = n + n;
zinit();
for (int i = 1; i <= n / 2; i++) getans(i);
for (int i = 1; i <= n / 2; i++) cout << anss[i] << ' ';
return 0;
}
死磕书本写的,但不知道哪里写炸了。