#include <bits/stdc++.h>
#include <atcoder/segtree>
#include <atcoder/modint>
using namespace std;
using namespace atcoder;

typedef long long ll;

const long long MOD = 998244353;
using mint = modint998244353;

mint op(mint lhs, mint rhs) {
  return lhs + rhs;
}

mint e() {
  return mint(0);
}

void solve(long long N, long long K, std::vector<long long> L, std::vector<long long> R){
  segtree<mint, op, e> dp(N);
  dp.set(0, 1);
  for (ll i = 1; i < N; ++i) {
    mint t = 0;
    for (ll j = 0; j < K; ++j) {
      ll l = max(i - R[j], 0ll);
      ll r = max(i - L[j]+1, 0ll);
      t += dp.prod(l,r);
    }
    dp.set(i, t);
  }
  cout << dp.get(N-1).val() << endl;
}

int main() {
  ios::sync_with_stdio(false);
  cin.tie(0);
  long long N;
  std::cin >> N;
  long long K;
  std::cin >> K;
  std::vector<long long> L(K);
  std::vector<long long> R(K);
  for(int i = 0 ; i < K ; i++){
    std::cin >> L[i];
    std::cin >> R[i];
  }
  solve(N, K, std::move(L), std::move(R));
  return 0;
}
