#include <bits/stdc++.h>
#define pb push_back
#define mp make_pair
#define mt make_tuple
#define debug cerr << "-- " << __LINE__ << " --" << endl
#define MOD 1000000007
#define ALL(o) (o).begin(), (o).end()
typedef int ll;

using namespace std;
typedef vector<int> vi;
typedef vector<vi> vvi;
typedef vector<ll> vl;
typedef vector<vl> vvl;
template <typename T> string to_string(const vector<T> &xs) {string s="["; for(int i=0;i<xs.size();i++) s += (i>0 ? " " : "") + to_string(xs[i]); return s + "]";}
template <typename T> ll argmax(const T &xs) {return distance(xs.begin(), max_element(xs.begin(), xs.end()));}
template <typename T> ll argmin(const T &xs) {return distance(xs.begin(), min_element(xs.begin(), xs.end()));}

ll nextLL(){ll x; scanf("%d", &x); return x;}


int nextInt(){int x; scanf("%d", &x); return x;}
string nextString(){string s; cin >> s; return s;}



ll extgcd(ll a, ll b, ll &x, ll &y) {
  ll g = a; x = 1; y = 0;
  if (b != 0) g = extgcd(b, a % b, y, x), y -= (a / b) * x;
  return g;
}
ll gcd(ll a, ll b) { ll x, y; return extgcd(a, b, x, y);}

class llm{
	ll n;
public:
	llm(){n = 0;}
	llm(ll n){this->n = (n >= 0) ? (n % MOD) : (MOD - 1 - (-n-1 % MOD));}
	operator ll() const {return n;}
	llm operator+(const llm &y) const{ return llm((ll)*this + (ll)y);}
	llm operator+=(const llm &y) { *this = *this + y; return *this;}
	llm operator-(const llm &y) const{ return llm((ll)*this - (ll)y);}
	llm operator-=(const llm &y) { *this = *this - y; return *this;}
	llm operator-() const{ return llm(0) - *this;}
	llm operator*(const llm &y) const{ return llm((ll)*this * (ll)y);}
	llm operator*=(const llm &y) { *this = *this * y; return *this;}
	llm operator/(const llm &y) const{ return *this * y.inv();}
	llm operator/=(const llm &y) { *this = *this / y; return *this;}
	llm inv() const{
		ll x, y;
		if (extgcd(n, MOD, x, y) == 1) return llm(x);
  		return llm(0); // unsolvable
	}
	friend istream& operator >> (istream& os, llm& x);
	friend ostream& operator << (ostream& os, const llm& x);
};
istream& operator >> (istream& is, llm& x){ll n; is >> n; x = llm(n); return is;}
ostream& operator << (ostream& os, const llm& x){os << (ll)x; return os;}

template<typename T> T comb(ll n, ll k){
	T ret = 1;
	for(ll i=1;i<=k;i++) ret = ret * T(n - k + i) / T(i);
	return ret;
}

vector<pair<ll, ll>> segmentUnion(vector<pair<ll, ll>> segments){
	vector<pair<ll, ll>> ret;
	if (segments.empty()) return ret;
	// sort(segments.begin(), segments.end());
	ll l = segments[0].first, r = segments[0].second;
	for(int i=1;i<segments.size();i++){
		if (r <= segments[i].first){
			ret.push_back(make_pair(l, r));
			l = segments[i].first; r = segments[i].second;
		}else{
			r = max(r, segments[i].second);
		}
	}
	ret.push_back(make_pair(l, r));
	return ret;
}


ll M, N;
vector<ll> l, r;

int main(void){
	cin >> N >> M;
	for(int i=0;i<N;i++){
		l.pb(nextLL()); r.pb(nextLL());
	}

	vector<ll> delta(M+10);

	for(int i=0;i<N;i++){
		vector<pair<ll, ll>> seg;
		ll sq = sqrt(r[i]);
		for(int j=1;;j++){
			ll nl = ceil((0.0 + l[i])/j);
			ll nr = r[i]/j;
			if (nl <= nr) seg.pb(mp(nl, nr + 1));
			if (nr < sq) break;
		}
		reverse(ALL(seg));
		// seg らの和集合を取りたい
		seg = segmentUnion(seg);
		// 得られた seg たちを imos に追加
		for(auto &s : seg){
			delta[s.first]++; 
			delta[s.second]--; 
		}

		if (!seg.empty()) sq = min(sq, seg[0].first-1);
		// seg.pb(mp(1, r[i]-l[i]+2));
		delta[1]++; delta[min(r[i]-l[i]+2, sq+1)]--;

		for(int j=r[i]-l[i]+2;j<=sq;j++){
			ll tmp = l[i]/j*j;
			if (tmp==l[i] || tmp+j <= r[i]){
				// seg.pb(mp(j, j + 1));
				delta[j]++; delta[j+1]--;
			}
		}

	}
	ll ans = 0;
	for(int i=1;i<=M;i++){
		ans += delta[i];
		printf("%d\n", ans);
	}
    return 0;
}




Measured memory_bytes: 3692