Problem:
Score : 700 points

Problem Statement

Snuke has decided to play a game, where the player runs a railway company.
There are M+1 stations on Snuke Line, numbered 0 through M.
A train on Snuke Line stops at station 0 and every d-th station thereafter, where d is a predetermined constant for each train.
For example, if d = 3, the train stops at station 0, 3, 6, 9, and so forth.

There are N kinds of souvenirs sold in areas around Snuke Line. The i-th kind of souvenirs can be purchased when the train stops at one of the following stations: stations l_i, l_i+1, l_i+2, ..., r_i.

There are M values of d, the interval between two stops, for trains on Snuke Line: 1, 2, 3, ..., M.
For each of these M values, find the number of the kinds of souvenirs that can be purchased if one takes a train with that value of d at station 0.
Here, assume that it is not allowed to change trains.

Constraints

1 ≦ N ≦ 3 × 10^{5}

1 ≦ M ≦ 10^{5}

1 ≦ l_i ≦ r_i ≦ M

Input

The input is given from Standard Input in the following format:

N M
l_1 r_1
:
l_{N} r_{N}

Output

Print the answer in M lines. The i-th line should contain the maximum number of the kinds of souvenirs that can be purchased if one takes a train stopping every i-th station.

Sample Input 1

3 3
1 2
2 3
3 3

Sample Output 1

3
2
2

If one takes a train stopping every station, three kinds of souvenirs can be purchased: kind 1, 2 and 3.

If one takes a train stopping every second station, two kinds of souvenirs can be purchased: kind 1 and 2.

If one takes a train stopping every third station, two kinds of souvenirs can be purchased: kind 2 and 3.

Sample Input 2

7 9
1 7
5 9
5 7
5 9
1 1
6 8
3 4

Sample Output 2

7
6
6
5
4
5
5
3
2

Solution in C++14 (GCC 5.4.1) (judge verdict: Accepted)

#include<iostream>
#include<algorithm>
#include<vector>
#include<queue>
#include<unordered_map>
#include<unordered_set>
using namespace std;
typedef long long ll;
#define chmin(a,b) a=min(a,b)
#define chmax(a,b) a=max(a,b)
#define mod 1000000007
#define mad(a,b) a=(a+b)%mod;
#define mul(a,b) a=a*b%mod;
#define N 300010
#define M 100010
namespace bit{
    ll dat[N];
    void init(){
        for(int i=0;i<N;i++)dat[i]=0;
    }
    void add(ll i){
        for(;i<N;i+=i&-i){
            dat[i]++;
        }
    }
    ll sum(ll i){
        ll res=0;
        for(;i>0;i-=i&-i){
            res+=dat[i];
        }
        return res;
    }
}
vector<ll> v[2*M];
ll n,m;
ll ans[2*M];
int main(){
  cin>>n>>m;
  for(int i=0;i<n;i++){
      ll l,r; cin>>l>>r;
      v[r].push_back(l);
  }
  bit::init();
  for(int i=1;i<=2*m;i++){
      vector<ll> di;
      for(ll j=1;j*j<=i;j++){
          if(i%j==0){
              di.push_back(j);
              if(j*j!=i){
                  di.push_back(i/j);
              }
          }
      }
      for(auto d:di){
          ans[d]+=bit::sum(i-1)-bit::sum(i-d);
          //cout<<"---"<<d<<" "<<ans[d]<<endl;
      }
      for(auto l:v[i]){
          bit::add(l);
      }
      //for(int j=1;j<=m;j++)cout<<bit::sum(j)<<" "; cout<<endl;
  }
  for(int i=1;i<=m;i++){
      cout<<n-ans[i]<<endl;
  }
  return 0;
}