#include<cstdio>
int N,M;
struct range{int l,r;range*next;}a[300010],*fir[300010];
int b[100010];
void add(int i,int x){for(;i<=M;i+=i&-i)b[i]+=x;}
int query(int i){int s=0;for(;i;i-=i&-i)s+=b[i];return s;}
int main(){
	scanf("%d%d",&N,&M);
	for(int i=0,l,r;i<N;i++){
		scanf("%d%d",&l,&r);++r;
		a[i]=(range){l,r,fir[r-l]};fir[r-l]=a+i;
	}
	for(int i=1;i<=M;i++){
		for(range*j=fir[i];j;j=j->next,N--)add(j->l,1),add(j->r,-1);
		int ans=N;
		for(int j=i;j<=M;j+=i)ans+=query(j);
		printf("%d\n",ans);
	}
}