#include <atcoder/all>
#include <bits/stdc++.h>
using namespace std;
using namespace atcoder;
#define int long long
   template<class T>bool chmax(T &a, const T &b) { if (a<b) { a=b; return 1; } return 0; }
template<class T>bool chmin(T &a, const T &b) { if (b<a) { a=b; return 1; } return 0; }
    const int MAX =3001;
const int MOD =998244353;

  int op(int a, int b) {
    return a+b;
}

int e() {
    return 0;
}
  
signed main(){
  int n,k;
  cin>>n>>k;
  vector<pair<int,int>> p;
  int l,r;
  for(int i=0;i<k;i++){
    cin>>l>>r;
    p.push_back({l,r});
  }
  sort(p.begin(),p.end());
  bool used[p.size()]={};
  vector<pair<int,int>>q;
  pair<int,int>p0=p[0];
  for(int i=1;i<p.size();i++){
    if(p[i].first<=p0.second){
      p0.second=max(p0.second,p[i].second);
    }else{
      q.push_back(p0);
      p0=p[i];
    }
 
    

  }
     q.push_back(p0);
  
  segtree<int,op,e> tr(n);
  tr.set(0,1);
  for(int i=1;i<n;i++){
    int sm=0;
    for(auto&& j:q){
      sm=(sm+tr.prod(max(0ll,i-j.second),max(0ll,1+i-j.first)))%MOD;
    }
    tr.set(i,sm);
      //cout<<tr.get(i)<<endl;
  }
  cout<<tr.get(n-1)<<endl;

}