#include <bits/stdc++.h>
using namespace std;
using ll = long long;
const int maxn = 1e5 + 5;
const int mod = 998244353;
int cnt, prime[maxn], mu[maxn], n, m;
int l[maxn], r[maxn];
ll dp[maxn], sum[maxn], ans;
bitset<maxn> vis;
ll solve(int d) {
  int M = m / d, L, R;
  for (int i = 1; i <= M; i++) dp[i] = 0;
  dp[0] = 1;
  for (int i = 1; i <= n; i++) {
    L = (l[i] + d - 1) / d, R = r[i] / d;
    if (L > R) return 0;
    sum[0] = dp[0];
    for (int j = 1; j <= M; j++) sum[j] = sum[j - 1] + dp[j];
    for (int j = 0; j <= M; j++)
      dp[j] = ((j - L >= 0 ? sum[j - L] : 0) + mod -
               (j - R - 1 >= 0 ? sum[j - R - 1] : 0)) %
              mod;
  }
  ll ret = 0;
  for (int i = 1; i <= M; i++) ret = (ret + dp[i]) % mod;
  return ((ret % mod) + mod) % mod;
}
int main() {
  int N = 1e5;
  mu[1] = 1;
  for (int i = 2; i <= N; i++) {
    if (!vis[i]) prime[++cnt] = i, mu[i] = -1;
    for (int j = 1; j <= cnt && i * prime[j] <= N; j++) {
      vis[i * prime[j]] = 1;
      if (i % prime[j] == 0) break;
      mu[i * prime[j]] = -mu[i];
    }
  }
  scanf("%d %d", &n, &m);
  for (int i = 1; i <= n; i++) scanf("%d %d", &l[i], &r[i]);
  for (int i = 1; i <= m; i++) ans = (ans + 1ll * solve(i) * mu[i]) % mod;
  printf("%lld\n", ((ans % mod) + mod) % mod);
  return 0;
}
