#include <bits/stdc++.h>
#pragma GCC optimize ("O3")
#pragma GCC target ("sse4")
using namespace std;
#define fi first
#define se second
#define pb push_back
typedef pair<int, int> ii;
typedef long long ll;
const int maxn = 3e5+5;
struct node
{
int t, L, R, det;
node(){}
node(int t, int L, int R): t(t), L(L), R(R)
{
if(t == 1) det = R-L;
else det = L;
}
bool operator < (node other) const
{
if(det != other.det) return det> other.det;
return t< other.t;
}
};
int ft[maxn];
int n, m;
void update(int x, int dx)
{
for(; x<= n; x += x&(-x)) ft[x] += dx;
}
int sum(int x)
{
int res = 0;
for(; x; x -= x&(-x)) res += ft[x];
return res;
}
vector<node> vec;
int st[maxn], ed[maxn];
int ans[maxn];
int main()
{
scanf("%d %d", &m, &n);
for(int i = 1; i<= n; i++) vec.pb(node(2, i, i));
for(int i = 1; i<= m; i++)
{
scanf("%d %d", &st[i], &ed[i]);
update(st[i], 1);
update(ed[i]+1, -1);
vec.pb(node(1, st[i], ed[i]));
}
sort(vec.begin(), vec.end());
int over = 0;
for(auto kk : vec)
{
int t = kk.t;
int L = kk.L;
int R = kk.R;
if(t == 1)
{
update(L, -1);
update(R+1, 1);
over++;
}
else
{
int x = L;
int res = 0;
for(int y = 0; y<= n; y += x)
{
res += sum(y);
}
ans[x] = over+res;
}
}
for(int i = 1; i<= n; i++) printf("%d\n", ans[i]);
}