#include <bits/stdc++.h>
using namespace std;
const int MOD = 998244353;
inline int add(const int& x, const int& y) {
  return (x + y) >= MOD ? x + y - MOD : x + y;
}
inline int dec(const int& x, const int& y) {
  return x < y ? x - y + MOD : x - y;
}
int fac[300005], finv[300005];
inline int qpow(int a, int p) {
  int ans = 1;
  while (p) {
    if (p & 1) ans = (long long)ans * a % MOD;
    a = (long long)a * a % MOD;
    p >>= 1;
  }
  return ans;
}
inline void init() {
  const int N = 3e5;
  fac[0] = 1;
  for (int i = 1; i <= N; i++) fac[i] = (long long)fac[i - 1] * i % MOD;
  finv[N] = qpow(fac[N], MOD - 2);
  for (int i = N - 1; i >= 0; i--)
    finv[i] = (long long)finv[i + 1] * (i + 1) % MOD;
}
inline int C(const int& n, const int& m) {
  return (long long)fac[n] * finv[m] % MOD * finv[n - m] % MOD;
}
int a[300005], sum[41][300005], l[300005], r[300005], u[25], v[25];
int t[300005], cnt;
int main() {
  init();
  int n, m;
  scanf("%d%d", &n, &m);
  for (int i = 1; i <= n; i++)
    scanf("%d%d", &l[i], &r[i]), ++a[l[i]], --a[r[i] + 1];
  for (int i = 1; i <= n; i++) a[i] += a[i - 1];
  for (int k = 0; k <= 40; k++)
    for (int i = 1; i <= n; i++) {
      if (a[i] >= i && i >= k) sum[k][i] = C(a[i] - k, i - k);
      sum[k][i] = add(sum[k][i], sum[k][i - 1]);
    }
  for (int i = 0; i < m; i++) scanf("%d%d", &u[i], &v[i]);
  int res = 0;
  for (int S = 0; S < (1 << m); S++) {
    int sgn = 0, ans = 0;
    cnt = 0;
    int cl = 1, cr = n;
    for (int i = 0; i < m; i++)
      if (S & (1 << i)) {
        sgn ^= 1;
        t[++cnt] = u[i], t[++cnt] = v[i];
      }
    sort(t + 1, t + cnt + 1);
    cnt = unique(t + 1, t + cnt + 1) - t - 1;
    for (int i = 1; i <= cnt; i++) cl = max(cl, l[t[i]]), cr = min(cr, r[t[i]]);
    if (cl > cr) continue;
    ans = add(ans, dec(sum[cnt][cr], sum[cnt][cl - 1]));
    if (sgn)
      res = dec(res, ans);
    else
      res = add(res, ans);
  }
  printf("%d\n", res);
  return 0;
}
