#include<bits/stdc++.h>
using namespace std;
const int N=3e5+10,M=1e5+10,oo=1e9;
int n,m,tree[M];
struct Node{
	int l,r,len;
	bool operator<(Node k)const{return len<k.len;}
}p[N];
void upd(int x,int d){
	while(x<=m){
		tree[x]+=d;
		x+=x&(-x);
	}
	return;
}
int que(int x){
	int temp=0;
	while(x>0){
		temp+=tree[x];
		x-=x&(-x);
	}
	return temp;
}
int main(){
	scanf("%d%d",&n,&m);
	for(int i=1;i<=n;i++) scanf("%d%d",&p[i].l,&p[i].r),p[i].len=p[i].r-p[i].l+1;
	sort(p+1,p+n+1);
	p[n+1].len=oo;
	int point=1,temp=0;
	for(int i=1;i<=m;i++){
		while(p[point].len<i){
			upd(p[point].l,1);
			upd(p[point].r+1,-1);
			point++;
		}
		temp=0;
		for(int j=i;j<=m;j+=i) temp+=que(j);
		printf("%d\n",temp+n-point+1);
	}
	return 0;
}