#include <bits/stdc++.h>
using namespace std;
struct segtree {
  int n, dat[2 * (1 << 17) - 1];
  void init(int n_) {
    n = 1;
    while (n < n_) n *= 2;
    for (int i = 0; i < 2 * n - 1; i++) dat[i] = 0;
  }
  void update(int a, int b, int v, int k, int l, int r) {
    if (r <= a || b <= l) return;
    if (a <= l && r <= b) {
      dat[k] += v;
      return;
    }
    update(a, b, v, k * 2 + 1, l, (l + r) / 2);
    update(a, b, v, k * 2 + 2, (l + r) / 2, r);
  }
  int query(int a) {
    a += n - 1;
    int ret = 0;
    while (true) {
      ret += dat[a];
      if (a == 0) break;
      a = (a - 1) / 2;
    }
    return ret;
  }
} seg;
int n, m;
int main() {
  cin >> n >> m;
  seg.init(m);
  for (int i = 0; i < n; i++) {
    int l, r;
    cin >> l >> r;
    seg.update(l, r + 1, 1, 0, 0, seg.n);
    int pl = l, pr = r;
    for (int j = 2;; j++) {
      int L = l / j, R = r / j;
      if (R == 0) break;
      if (L == pl) continue;
      if (R >= pl) {
        seg.update(1, pl, 1, 0, 0, seg.n);
        break;
      }
      if (l % j == 0)
        seg.update(L, R + 1, 1, 0, 0, seg.n);
      else
        seg.update(L + 1, R + 1, 1, 0, 0, seg.n);
      if (l % j == 0)
        pl = L;
      else
        pl = L + 1;
      pr = R + 1;
    }
  }
  for (int i = 0; i < m; i++) {
    cout << seg.query(i + 1) << endl;
  }
}
