#include <bits/stdc++.h>
using namespace std;
const int ST_SIZE = 1 << 17;
int sz;
int dat[ST_SIZE];
void rmq_init(int n) {
  sz = 1;
  while (sz < n) sz <<= 1;
}
int query(int i) {
  int k = (i + sz - 1);
  int ret = dat[k];
  while (k > 0) {
    k = ((k - 1) / 2);
    ret += dat[k];
  }
  return ret;
}
void add_sub(int a, int b, int k, int l, int r) {
  if (r <= a || b <= l) return;
  if (a <= l && r <= b)
    dat[k]++;
  else {
    add_sub(a, b, (k * 2 + 1), l, ((l + r) / 2));
    add_sub(a, b, (k * 2 + 2), ((l + r) / 2), r);
  }
}
void add(int a, int b) { add_sub(a, b, 0, 0, sz); }
const int N_MAX = 300000;
const int M_MAX = 100000;
struct rng {
  int w, l, r;
};
int N, M;
rng a[N_MAX];
bool compare_w(const rng& r1, const rng& r2) { return r1.w < r2.w; }
void solve() {
  sort(a, a + N, compare_w);
  rmq_init(M + 1);
  int i = 0;
  for (int d = (1); d <= (int)(M); d++) {
    while (i < N && a[i].w < d) {
      add(a[i].l, a[i].r + 1);
      i++;
    }
    int ans = N - i;
    if (i > 0) {
      for (int e = d; e <= M; e += d) {
        ans += query(e);
      }
    }
    printf("%d\n", ans);
  }
}
void input() {
  scanf("%d%d", &N, &M);
  for (int i = 0; i < (int)(N); i++) {
    int l, r, w;
    scanf("%d%d", &l, &r);
    a[i] = {r - l + 1, l, r};
  }
}
int main() {
  input();
  solve();
  return 0;
}
