#include <bits/stdc++.h>

using namespace std;

struct Range
{
	int l,r,sz;
	Range(){}
}R[300001];

bool operator < (const Range &a, const Range &b)
{
	return a.sz < b.sz;
}

int n,m;
int ans[100011];
int Tree[100011];

void update(int x,int val)
{
	for(;x<=100010;x+=x&(-x))
		Tree[x] += val;
}

int query(int x)
{
	int ans = 0;
	for(;x>0;x-=x&(-x))
		ans += Tree[x];
	return ans;	
}

int main()
{
	ios::sync_with_stdio(false);
	cin.tie(0);
	cout.tie(0);

	cin >> n >> m;
	for (int i=1;i<=n;i++)
	{
		cin >> R[i].l >> R[i].r;
		R[i].sz = (R[i].r - R[i].l + 1);
	}	
	sort(R+1,R+1+n);
	int pos = 1;
	for (int i=1;i<=m;i++)
	{
		while(pos <= n && R[pos].sz < i)
		{
			update(R[pos].l,1);
			update(R[pos].r+1,-1);
			pos++;
		}
		ans[i] = (n - pos + 1);
		for (int j=i;j<=m;j+=i)
			ans[i] += query(j);
	}	
	for (int i=1;i<=m;i++)
		cout << ans[i] << '\n';
}