#include <bits/stdc++.h>
using namespace std;
vector<int> dat[300000];
int init(int n) {
  int nn = 1;
  while (nn < n) nn *= 2;
  return nn;
}
void update(int s, int t, int x, int k, int l, int r) {
  if (s <= l && t >= r)
    dat[k].push_back(x);
  else if (s >= r || t <= l)
    return;
  else {
    update(s, t, x, k * 2 + 1, l, (l + r) / 2);
    update(s, t, x, k * 2 + 2, (l + r) / 2, r);
  }
}
vector<int> get(int x, int n, vector<int> s) {
  x += n - 1;
  while (x) {
    copy(dat[x].begin(), dat[x].end(), back_inserter(s));
    x = (x - 1) / 2;
  }
  return s;
}
int main() {
  int n, nn, m;
  cin >> n >> m;
  nn = init(m);
  for (int i = 0; i < n; i++) {
    int l, r;
    cin >> l >> r;
    update(l, r + 1, i, 0, 0, nn);
  }
  for (int i = 1; i <= m; i++) {
    vector<int> v;
    for (int j = i; j <= m; j += i) {
      v = get(j, nn, v);
    }
    sort(v.begin(), v.end());
    v.erase(unique(v.begin(), v.end()), v.end());
    cout << v.size() << endl;
  }
  return 0;
}
