#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 >= (l + r) / 2)
      update(s, t, x, k * 2 + 2, (l + r) / 2, r);
    else if (t <= (l + r) / 2)
      update(s, t, x, k * 2 + 1, l, (l + r) / 2);
    else {
      update(s, (l + r) / 2, x, k * 2 + 1, l, (l + r) / 2);
      update((l + r) / 2, t, x, k * 2 + 2, (l + r) / 2, r);
    }
  }
}
set<int> get(int x, int n, set<int> s) {
  x += n - 1;
  while (x) {
    for (int i = 0; i < dat[x].size(); i++) s.insert(dat[x][i]);
    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++) {
    set<int> se;
    for (int j = 0; j <= m; j += i) {
      se = get(j, nn, se);
    }
    cout << se.size() << endl;
  }
  return 0;
}
