#include <bits/stdc++.h>

using ll = long long;
const ll mod = 998244353;
using namespace std;
#define int ll
struct node{
	ll val = 0;
	ll lz = 0;
} st[1 << 19];

void push(int p,int l = 0,int r = 0){
	st[p].val %= mod;
	st[p].val += st[p].lz * (r - l + 1);
	st[p].val %= mod;
	st[p*2].lz += st[p].lz;
	st[p*2].lz %= mod;
	st[p*2+1].lz += st[p].lz;
	st[p*2+1].lz %= mod;
	st[p].lz = 0;
}
void update(int p,int l,int r,int i,int j,ll val){
	push(p);
	if(r < i || j < l) return;
	if(i <= l && r <= j){
		st[p].lz = val;
		push(p,l,r);
	}else{
		int m = (l+r)/2;
		update(p*2,l,m,i,j,val);
		update(p*2+1,m+1,r,i,j,val);
	}
}

int qry(int p,int l,int r,int i){
	push(p);
	if(l == r){
		return st[p].val;
	}else{
		int m = (l+r)/2;
		if(i <= m){
			return qry(p*2,l,m,i);
		}else{
			return qry(p*2+1,m+1,r,i);
		}
	}
}

int main(){
	int n,k;
	cin >> n >> k;
	vector<pair<int,int>> segs;
	while(k--){
		int l,r;
		cin >> l >> r;
		segs.emplace_back(l,r);
	}
	update(1,0,n-1,0,0,1);
	for(int i = 0; i < n-1; i++){
		for(auto p: segs){
			int l,r;
			l = p.first; r = p.second;
			if(i + l < n){
				update(1,0,n-1,i+l,min(n-1,i+r),qry(1,0,n-1,i)%mod);
			}
		}
	}
	cout << qry(1,0,n-1,n-1);
}