#include <bits/stdc++.h>
using namespace std;
const int nmax = 300005;
const long long inf = 2e18;
const int mod = 1000000009;
int N, M, aint[nmax * 3], p[nmax * 3];
inline void Lazy(int nod) {
  if (!p[nod]) return;
  aint[2 * nod] += p[nod];
  aint[2 * nod + 1] += p[nod];
  p[2 * nod] += p[nod];
  p[2 * nod + 1] += p[nod];
  p[nod] = 0;
}
void Update(int nod, int st, int dr, int l, int r) {
  if (st == l && dr == r) {
    aint[nod]++;
    p[nod]++;
    return;
  }
  if (st == dr) return;
  Lazy(nod);
  int mij = ((st + dr) >> 1);
  if (r <= mij)
    Update(2 * nod, st, mij, l, r);
  else if (l > mij)
    Update(2 * nod + 1, mij + 1, dr, l, r);
  else {
    Update(2 * nod, st, mij, l, mij);
    Update(2 * nod + 1, mij + 1, dr, mij + 1, r);
  }
}
int Query(int nod, int st, int dr, int l, int r) {
  if (st == l && dr == r) return aint[nod];
  Lazy(nod);
  int mij = ((st + dr) >> 1);
  if (r <= mij)
    return Query(2 * nod, st, mij, l, r);
  else if (l > mij)
    return Query(2 * nod + 1, mij + 1, dr, l, r);
  else
    return Query(2 * nod, st, mij, l, r) +
           Query(2 * nod + 1, mij + 1, dr, l, r);
}
int main() {
  int i, x, y, lg;
  cin >> N >> M;
  for (i = 1; i <= N; ++i) {
    cin >> x >> y;
    lg = y - x + 1;
    Update(1, 1, M, x, y);
    if (x == 1) continue;
    if (lg >= x) lg = x - 1;
    Update(1, 1, M, 1, lg);
    if (lg + 1 < x && x % lg == 0 && lg > 1) Update(1, 1, M, lg + 1, lg + 1);
  }
  for (i = 1; i <= M; ++i) cout << Query(1, 1, M, i, i) << '\n';
  return 0;
}
