#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll mod = 998244353;
ll fac[1000001] = { 1,1 }, inv[1000001] = { 1,1 }, facinv[1000001] = { 1,1 }, mat[101][101], n, m;
ll solve(ll n) {
ll ans = 1, cnt = 1;
for (int i = 1; i <= n; ++i)
for (int j = i + 1; j <= n; ++j) {
while (mat[i][i]) {
int x = mat[j][i] / mat[i][i];
for (int k = i; k <= n; ++k) {
mat[j][k] -= x * mat[i][k] % mod;
(mat[j][k] += mod) %= mod;
}
swap(mat[i], mat[j]), cnt = -cnt;
}
for (int k = i; k <= n; ++k)swap(mat[i][k], mat[j][k]);
cnt = -cnt;
}
for (int i = 1; i <= n; ++i)
ans = ans * mat[i][i] % mod;
ans *= cnt;
return (ans + mod) % mod;
}
inline ll C(ll n, ll m) {
return fac[n] * facinv[m] % mod * facinv[n - m] % mod;
}
inline ll read() {
ll f = 1, x = 0; char ch = 0;
do { ch = getchar(); if (ch == '-')f = -1; } while (ch < '0' || ch>'9');
do { x = x * 10 + ch - '0'; ch = getchar(); } while (ch >= '0' && ch <= '9');
return f * x;
}
ll a[101], b[101];
int main() {
int T = read(), mn = 2;
while (T--) {
int n = read(), m = read();
for (int i = mn; i <= 2*max(mn, n); ++i)
fac[i] = fac[i - 1] * i % mod,
inv[i] = (mod - mod / i) * inv[mod % i] % mod,
facinv[i] = facinv[i - 1] * inv[i] % mod;
mn = 2*max(mn, n);
for (int i = 1; i <= m; ++i)a[i] = read(), b[i] = read();
for (int i = 1; i <= m; ++i)
for (int j = 1; j <= m; ++j)
mat[i][j] = a[i] <= b[j] ? C(b[j] - a[i] + n - 1, n - 1) : 0;
printf("%lld\n", solve(m));
}
return 0;
}