#include <bits/stdc++.h>
using namespace std;
int N, M, K;
int T[100050];
vector<int> primes;
bool isp(int x) {
  for (int i = 2; i * i <= x; i++)
    if (x % i == 0) return false;
  return true;
}
void update(int l, int r) {
  for (; r > 0; r -= (r & -r)) T[r]++;
  for (l--; l > 0; l -= (l & -l)) T[l]--;
}
int query(int x) {
  int res = 0;
  for (; x < 100050; x += (x & -x)) res += T[x];
  return res;
}
int main(void) {
  scanf("%d%d", &N, &M);
  for (int i = 1; i <= N; i++) {
    int a, b;
    scanf("%d%d", &a, &b);
    int len = b - a + 1;
    update(1, min(len, a - 1));
    update(a, b);
    set<int> used;
    for (int i = 1; i < a && i * i <= b; i++) {
      int x = a % i;
      if (x == 0) {
        if (i > min(len, a - 1) && i < a && used.find(i) == used.end()) {
          used.insert(i);
          update(i, i);
        }
        for (int j = a / i; j * i <= b; j++) {
          if (j > min(len, a - 1) && j < a && used.find(j) == used.end()) {
            used.insert(j);
            update(j, j);
          }
        }
      } else if (x != 0 && i - x <= len - 1) {
        if (i > min(len, a - 1) && i < a && used.find(i) == used.end()) {
          used.insert(i);
          update(i, i);
        }
        for (int j = (a + (i - x) / i); j * i <= b; j++) {
          if (j > min(len, a - 1) && j < a && used.find(j) == used.end()) {
            used.insert(j);
            update(j, j);
          }
        }
      }
    }
  }
  for (int i = 1; i <= M; i++) {
    printf("%d\n", query(i));
  }
}
