#include <bits/stdc++.h>
using namespace std;
const long long int MOD = 1000000007;
long long int N, M;
long long int l[364364], r[364364];
vector<pair<long long int, long long int> > vec;
long long int data[400200];
long long int datb[400200];
long long int pos = 0;
long long int MM;
void add(long long int a, long long int b, long long int x, long long int k,
         long long int l, long long int r) {
  if (a <= l && r <= b) {
    data[k] += x;
  } else if (l < b && a < r) {
    datb[k] += (min(b, r) - max(a, l)) * x;
    add(a, b, x, k * 2 + 1, l, (l + r) / 2);
    add(a, b, x, k * 2 + 2, (l + r) / 2, r);
  }
}
int sum(long long int a, long long int b, long long int k, long long int l,
        long long int r) {
  if (b <= l || r <= a) {
    return 0;
  } else if (a <= l && r <= b) {
    return data[k] * (r - l) + datb[k];
  } else {
    long long int res = (min(b, r) - max(a, l)) * data[k];
    res += sum(a, b, k * 2 + 1, l, (l + r) / 2);
    res += sum(a, b, k * 2 + 2, (l + r) / 2, r);
    return res;
  }
}
int main() {
  cin >> N >> M;
  MM = 1;
  while (MM < M) MM *= 2;
  for (int i = 0; i < N; i++) {
    cin >> l[i] >> r[i];
    vec.push_back(make_pair(r[i] - l[i] + 1, i));
  }
  sort(vec.begin(), vec.end());
  for (int i = 1; i <= M; i++) {
    while (vec[pos].first < i && pos < N) {
      long long int tmp = vec[pos].second;
      add(l[tmp], r[tmp] + 1, 1, 0, 0, MM);
      pos++;
    }
    long long int cnt = 0;
    for (int j = 0; j <= M; j += i) {
      cnt += sum(j, j + 1, 0, 0, MM);
    }
    cout << cnt + N - pos << endl;
  }
}
