#include <bits/stdc++.h>
using namespace std;
const int N = 300005, K = 25, mod = 998244353;
int n, m, cnt, bin[1 << 21], l[N], r[N], a[K], b[K], In[N];
bool vis[N];
long long f[K << 1], flv[N], inv[N], ans;
vector<int> vt[N];
bool check(int x) {
  for (int i = 1; i <= m; ++i) {
    if (a[i] == x && vis[b[i]]) return 1;
    if (b[i] == x && vis[a[i]]) return 1;
  }
  return 0;
}
int in(int S) {
  for (int i = 1; i <= m; ++i) In[a[i]] = In[b[i]] = 0;
  for (int i = 1; i <= m; ++i)
    if (S & (1 << i - 1)) {
      if (!vis[a[i]] || !vis[b[i]]) return -1;
      In[a[i]] = 1, In[b[i]] = 1;
    }
  int rt = 0;
  for (int i = 1; i <= m; ++i)
    rt += In[a[i]], In[a[i]] = 0, rt += In[b[i]], In[b[i]] = 0;
  return rt;
}
void init() {
  for (int i = 0; i <= 2 * m; ++i) f[i] = 0;
  for (int i = 0; i <= (1 << m) - 1; ++i) {
    int x = in(i);
    if (x == -1) continue;
    if (bin[i] & 1)
      f[x] = (f[x] - 1) % mod;
    else
      f[x] = (f[x] + 1) % mod;
  }
}
void del(int x) {
  vis[x] = 0, --cnt;
  if (check(x)) init();
}
void ins(int x) {
  vis[x] = 1, ++cnt;
  if (check(x)) init();
}
long long getmi(long long a, long long x) {
  long long rt = 1;
  while (x) {
    if (x & 1) rt = rt * a % mod;
    a = a * a % mod, x >>= 1;
  }
  return rt;
}
long long C(int n, int m) {
  if (n < 0 || m < 0 || n < m) return 0;
  return flv[n] * inv[m] % mod * inv[n - m] % mod;
}
long long calc(int s, int r) {
  long long rt = 0;
  for (int i = 0; i <= 2 * m; ++i) rt = (rt + f[i] * C(s - i, r - i)) % mod;
  return rt;
}
int main() {
  scanf("%d%d", &n, &m);
  flv[0] = 1, inv[0] = 1;
  for (int i = 1; i <= n; ++i)
    flv[i] = flv[i - 1] * i % mod, inv[i] = getmi(flv[i], mod - 2);
  for (int i = 1; i <= (1 << m) - 1; ++i) bin[i] = bin[i ^ (i & -i)] + 1;
  for (int i = 1; i <= n; ++i)
    scanf("%d%d", &l[i], &r[i]), vt[l[i]].push_back(i),
        vt[r[i] + 1].push_back(i);
  for (int i = 1; i <= m; ++i) scanf("%d%d", &a[i], &b[i]);
  init();
  for (int i = 1; i <= n; ++i) {
    int sz = vt[i].size();
    for (int j = 0; j <= sz - 1; ++j) {
      int x = vt[i][j];
      if (vis[x])
        del(x);
      else
        ins(x);
    }
    ans = (ans + calc(cnt, i)) % mod;
  }
  printf("%lld\n", (ans + mod) % mod);
  return 0;
}
