// Slower C++ solution:
//============================================================================

// Name        : test.cpp

// Author      : Qihan

// Version     :

// Copyright   : Your copyright notice

// Description : Hello World in C++, Ansi-style

//============================================================================



#include <bits/stdc++.h>

#define Lowbit(x) (x & (-x))

using namespace std;

typedef long long int LLI;

typedef pair<int,int> PII;

const int maxn = (300000 + 10);



struct Seg{

	int l,r,len;

}op[maxn];



bool cmp(Seg a,Seg b){

	return a.len < b.len;

}



int c[maxn];



void add(int x,int change,int n){

	while(x < n){

		c[x] += change;

		x += Lowbit(x);

	}

}



int sum(int x){

	int ans = 0;

	while(x > 0){

		ans += c[x];

		x -= Lowbit(x);

	}

	return ans;

}



int main(){

//	freopen("/home/qihan/Documents/in","r",stdin);

	int n,m;

	memset(c,0,sizeof(c));

	scanf("%d%d",&n,&m);

	for(int i = 1;i <= n;i ++){

		scanf("%d%d",&op[i].l,&op[i].r);

		op[i].len = op[i].r - op[i].l + 1;

	}

	sort(op + 1,op + 1 + n,cmp);

	int k = 1;

	for(int i = 1;i <= m;i ++){

		for(;k <= n && op[k].len < i;k ++){

			add(op[k].l,1,300000);

			add(op[k].r + 1,-1,300000);

		}

		int ans = n - k + 1;

		for(int j = i;j <= m;j += i){

			ans += sum(j);

		}

		printf("%d\n",ans);

	}

	return 0;

}


// Faster C++ solution for the same problem (measured speedup: 2.2171803964008023x):
#include<bits/stdc++.h>

using namespace std;

namespace Flandle_Scarlet

{

    #define N 300100

    int n,m;

    class BIT

    {

        public:

            int tree[N];

            int len;

            void BuildTree(int _len)

            {

                len=_len;

            }

            void Add(int pos,int x)

            {

                while(pos<=len)

                {

                    tree[pos]+=x;

                    pos+=(pos&(-pos));

                }

            }

            void RAdd(int l,int r,int x)

            {

                Add(l,x),Add(r+1,-x);

            }

            int Query(int pos)

            {

                int ans=0;

                while(pos>0)

                {

                    ans+=tree[pos];

                    pos-=(pos&(-pos));

                }

                return ans;

            }

    }T;

    struct node

    {

        int l,r;

    }c[N];bool operator<(node a,node b){return a.r-a.l<b.r-b.l;}



    void Input()

    {

        scanf("%d%d",&n,&m);

        for(int i=1;i<=n;++i)

        {

            int l,r;

            scanf("%d%d",&l,&r);

            c[i]=(node){l,r};

        }

        sort(c+1,c+n+1);

    }



    int ans[N];

    void Soviet()

    {

        T.BuildTree(m);

        int now=0;

        for(int d=1;d<=m;++d)

        {

            int ans=n-now;

            for(int i=d;i<=m;i+=d)

            {

                ans+=T.Query(i);

            }

            printf("%d\n",ans);

            while(now<n and c[now+1].r-c[now+1].l<=d)

            {

                T.RAdd(c[now+1].l,c[now+1].r,1);

                ++now;

            }

        }

    }

    void IsMyWife()

    {

        if (0)

        {

            freopen("","r",stdin);

            freopen("","w",stdout);

        }

        Input();

        Soviet();

    }

};

int main()

{

    Flandle_Scarlet::IsMyWife();

    return 0;

}