#include <stdio.h>
#include <algorithm>
using namespace std;
struct data{
    int s,e;
    bool operator<(const data&r)const{
        if(s==r.s)return e<r.e;
        return s<r.s;
    }
}a[300010];
struct Node{
    int cnt;
    Node *l,*r;
    Node(int cnt,Node *l,Node *r):cnt(cnt),l(l),r(r){}
    Node *update(int s,int e,int k);
}*root[300010];
Node *null=new Node(0,NULL,NULL);
Node *Node::update(int s,int e,int k){
    if(e<k||k<s)return this;
    if(s==e)return new Node(this->cnt+1,null,null);
    int m=(s+e)/2;
    return new Node(this->cnt+1,this->l->update(s,m,k),this->r->update(m+1,e,k));
}
int query(Node *a,int s,int e,int si,int ei){
    if(ei<s||e<si)return 0;
    if(si<=s&&e<=ei)return a->cnt;
    int m=(s+e)/2;
    return query(a->l,s,m,si,ei)+query(a->r,m+1,e,si,ei);
}
int main(){
    int i,j,k,l,n,m;
    scanf("%d%d",&n,&m);
    for(i=1;i<=n;++i)scanf("%d%d",&a[i].s,&a[i].e);
    sort(a+1,a+n+1);
    root[0]=null->l=null->r=null;
    for(i=1;i<=n;++i)root[i]=root[i-1]->update(1,m,a[i].e);
    for(i=1;i<=m;++i){
        j=i,k=0;
        int ans=0;
        for(;j<=m;j+=i){
            data t={j,1e9};
            l=upper_bound(a+k+1,a+n+1,t)-a-1;
            ans+=query(root[l],1,m,j,m)-query(root[k],1,m,j,m);
            k=l;
        }
        printf("%d\n",ans);
    }
    return 0;
}
