#include<bits/stdc++.h>
using namespace std;
#define int long long
typedef pair<int, int> PII;
typedef long long LL;
const int INF = 0x3f3f3f3f3f3f3f3f, mod = 998244353;
bool multi = 0;
const int N = 210;
int n, m;
struct Node {
int l, r;
bool operator<(const Node &w) const {
if(l != w.l) return l < w.l;
return r < w.r;
}
}seg[N];
vector<int> nums;
int find(int x) {
return lower_bound(nums.begin(), nums.end(), x) - nums.begin() + 1;
}
int dp[210][410][410];
void solve(){
cin >> n >> m;
for(int i = 1; i <= m; i++) {
cin >> seg[i].l >> seg[i].r;
nums.push_back(seg[i].l);
nums.push_back(seg[i].r);
}
nums.push_back(1);
nums.push_back(n);
sort(nums.begin(), nums.end());
nums.erase(unique(nums.begin(), nums.end()), nums.end());
for(int i = 1; i <= m; i++) {
seg[i].l = find(seg[i].l);
seg[i].r = find(seg[i].r);
}
sort(seg + 1, seg + m + 1);
n = nums.size();
dp[0][0][0] = 1;
for(int k = 1; k <= m; k++) {
int l = seg[k].l, r = seg[k].r;
for(int i = 0; i <= n; i++) {
for(int j = i; j <= n; j++) {
dp[k][i][j] = (dp[k][i][j] + dp[k - 1][i][j]) % mod;
if(l - 1 <= i && j <= r) {
dp[k][j][r] = (dp[k][j][r] + dp[k - 1][i][j]) % mod;
}else if(l - 1 <= i && i <= r && r <= j) {
dp[k][r][j] = (dp[k][r][j] + dp[k - 1][i][j]) % mod;
}else if(r <= i) {
dp[k][i][j] = (dp[k][i][j] + dp[k - 1][i][j]) % mod;
}
}
}
}
cout << dp[m][n][n] << '\n';
}
signed main(){
ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
int T = 1;
if(multi) cin >> T;
while(T--) {
solve();
}
return 0;
}