#include <bits/stdc++.h>
using namespace std;
const int N = 3e5 + 5;
const int mod = 998244353;
long long qpow(long long a, long long n) {
  long long re = 1;
  while (n > 0) {
    if (n & 1) {
      re *= a;
      re %= mod;
    }
    a *= a;
    a %= mod;
    n >>= 1;
  }
  return re;
}
vector<int> v[N];
int f[N], inv[N];
int a[N], l[N], r[N], x[N], y[N], vis[N];
int dp[50][50];
int cal(int n, int m) {
  if (n < m || n < 0 || m < 0) return 0;
  return 1ll * f[n] * inv[m] % mod * inv[n - m] % mod;
}
int main() {
  f[0] = 1;
  for (int i = 1; i < N; i++) {
    f[i] = 1ll * f[i - 1] * i % mod;
  }
  for (int i = 0; i < N; i++) {
    inv[i] = qpow(f[i], mod - 2);
  }
  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]--;
  }
  int ans = 0;
  for (int i = 1; i <= n; i++) {
    a[i] += a[i - 1];
    ans += cal(a[i], i);
    ans %= mod;
  }
  for (int i = 1; i <= m; i++) {
    scanf("%d%d", &x[i], &y[i]);
    if (max(l[x[i]], l[y[i]]) <= min(r[x[i]], r[y[i]])) {
      v[max(l[x[i]], l[y[i]])].push_back(i);
      v[min(r[x[i]], r[y[i]]) + 1].push_back(-i);
    }
  }
  int mask = 0;
  for (int i = 1; i <= n; i++) {
    for (int j = 0; j < v[i].size(); j++) {
      if (v[i][j] > 0)
        mask |= 1 << v[i][j] - 1;
      else
        v[i][j] = -v[i][j], mask ^= 1 << v[i][j] - 1;
    }
    if (v[i].size() != 0) {
      for (int j = 1; j <= m; j++) {
        for (int k = 2; k <= 2 * j; k++) {
          dp[j][k] = 0;
        }
      }
      for (int j = 1; j <= mask; j++) {
        if ((j | mask) == mask) {
          int cnt1 = 0, cnt2 = 0;
          for (int k = 0; k < m; k++) {
            if (j & (1 << k)) {
              cnt1++;
              if (!vis[x[k + 1]]) cnt2++;
              if (!vis[y[k + 1]]) cnt2++;
              vis[x[k + 1]] = vis[y[k + 1]] = 1;
            }
          }
          dp[cnt1][cnt2]++;
          for (int k = 0; k < m; k++) {
            vis[x[k + 1]] = vis[y[k + 1]] = 0;
          }
        }
      }
    }
    for (int j = 1; j <= m; j++) {
      for (int k = 2; k <= 2 * j; k++) {
        if (j & 1)
          ans -= 1ll * dp[j][k] * cal(a[i] - k, i - k) % mod;
        else
          ans += 1ll * dp[j][k] * cal(a[i] - k, i - k) % mod;
        ans %= mod;
        ans += mod;
        ans %= mod;
      }
    }
  }
  printf("%d", ans);
}
