#include <bits/stdc++.h>
using namespace std;
const int INF = 1e9;
using namespace std;
class FenwickTree {
 private:
  vector<long long> ft;

 public:
  FenwickTree(int m) { ft.assign(m + 1, 0); }
  long long rsq(int j) {
    long long sum = 0;
    for (; j; j -= ((j) & -(j)))
      sum = (sum % 998244353 + ft[j] % 998244353) % 998244353;
    return sum;
  }
  long long rsq(int i, int j) { return rsq(j) - rsq(i - 1); }
  void update(int i, long long v) {
    for (; i < (int)ft.size(); i += ((i) & -(i)))
      ft[i] = (ft[i] % 998244353 + v % 998244353) % 998244353;
  }
};
int range(int x, int N) {
  if (x > N)
    return N + 1;
  else
    return x;
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  int N, K;
  cin >> N >> K;
  int v[N + 5], L[K], R[K];
  fill(v, v + N + 5, 0);
  FenwickTree ft(INF);
  v[N] = 1;
  ft.update(N, 1);
  for (int i = 0; i < K; i++) cin >> L[i] >> R[i];
  for (int j = N - 1; j >= 1; j--) {
    for (int k = 0; k < K; k++) {
      v[j] = (v[j] % 998244353 +
              ft.rsq(range(j + L[k], N), range(j + R[k], N)) % 998244353) %
             998244353;
    }
    ft.update(j, v[j]);
  }
  cout << v[1];
  return 0;
}
