int main(){
    int N,K;
    cin>>N>>K;
    int L[K],R[K];
    vector<int> S;
    int M[N];
    for(int i=0;i<K;i++){
        cin>>L[i]>>R[i];
        for(int j=L[i];j<=R[i];j++){
            S.push_back(j);
        }
    }
    for(int i=0;i<N;i++){
        M[i]=0;
    }
    int ans = 0;
    int maxElementIndex = std::min_element(S.begin(),S.end()) - S.begin();
    int min = *std::min_element(S.begin(), S.end());
    M[N-min-1] = 1;   //最後のところからは一通り。
    ans=1;
    sort(S.begin(),S.end());//昇順ソート
    for(int i=N-min-2;i>=0;i--){  //最後から二番目からスタート
        for(int j=0;(j<K)&&(i+S.at(j))<N;j++){
            M[i] = S.at(j)+M[i+S.at(j)];
            ans++;
            ans %= 998244353;
        }
    }
    cout<<M[0]<<endl;
}