#include <bits/stdc++.h>
using namespace std;
class FenwickTree {
 private:
  int n;
  vector<long long> dat;

 public:
  FenwickTree(int _n) : n(_n), dat(_n + 1, 0) {}
  FenwickTree(int _n, long long init) : n(_n), dat(_n + 1, 0) {
    for (int i = 0; i < _n; i++) {
      add(i, init);
    }
  }
  void add(int idx, long long value) {
    for (idx++; idx <= n; idx += idx & -idx) {
      dat[idx] += value;
    }
  }
  long long query(int l, int r) {
    long long ans = 0;
    for (r++; r > 0; r -= r & -r) {
      ans += dat[r];
    }
    for (; l > 0; l -= l & -l) {
      ans -= dat[l];
    }
    return ans;
  }
};
bool comp(pair<int, int> a, pair<int, int> b) {
  return a.second - a.first < b.second - b.first;
}
int main(void) {
  int n, m;
  scanf("%d%d", &n, &m);
  vector<pair<int, int> > A(n);
  for (int i = 0; i < n; i++) {
    scanf("%d%d", &A[i].first, &A[i].second);
  }
  sort(A.begin(), A.end(), comp);
  FenwickTree ft(m + 1);
  int idx = 0;
  for (int d = 1; d < m + 1; d++) {
    for (; idx < n && A[idx].second - A[idx].first < d; idx++) {
      ft.add(A[idx].first, 1);
      ft.add(A[idx].second + 1, -1);
    }
    long long count = n - idx;
    for (int i = 0; i < m + 1; i += d) {
      printf("%d\n", ft.query(0, i));
    }
    printf("%d\n", count);
  }
}
