#include <bits/stdc++.h>
using namespace std;
#define rep(i, n) for (int i = 0; i < (int)(n); i++)
#define PI 3.14159265358979323846
#define int long long
constexpr long long INF = numeric_limits<long long>::max() / 2;
constexpr int MOD = 998244353;
using Graph = vector<vector<int>>;



signed main() {
    cin.tie(nullptr);
    ios::sync_with_stdio(false);


    int N,K;
    cin>>N>>K;
    //int l[K],r[K];
    pair<int,int> pp[K];
    // rep(i,K){
    //     cin>>l[i]>>r[i];
    // }
    //map<int,int> m;
    vector<int> v;
    bool vv[N+3]{};
    rep(i,K){
        int a,b;
        cin>>a>>b;
        pp[i]=make_pair(a,b);
        
    }
    int t=0;
    sort(pp,pp+K);
    for(auto p:pp){
        int h=max(p.first,t);
        //cout<<p.first<<" "<<p.second<<endl;
        for(int j=h;j<=p.second;j++){
            vv[j]=true;
        }
        t=max(t,p.second);
    }
    rep(i,N+1){
        if(vv[i])v.push_back(i);
    }
    int dp[N+1]{};
    dp[1]=1;
    for(int i=1;i<=N-1;i++){
        for(auto p:v){
            if(i+p>N)break;
            dp[i+p]=(dp[i+p]+dp[i])%MOD;
            //dp[i+p]%=MOD;
        }
    }
    cout<<dp[N]<<endl;






}
