#include <bits/stdc++.h>
using namespace std;
struct fentree {
  int n;
  vector<long long int> tree;
  void init(int n) {
    this->n = n;
    tree.assign(n + 2, 0);
  }
  void set(int i, long long int val) {
    while (i <= n) {
      tree[i] += val;
      i += i & -i;
    }
  }
  long long int get(int a) {
    long long int s = 0;
    while (a > 0) {
      s += tree[a];
      a -= a & -a;
    }
    return s;
  }
  long long int get(int a, int b) { return get(b) - get(a - 1); }
};
void solve() {
  int i, j;
  int n, k;
  cin >> n >> k;
  vector<pair<int, int>> intervals(k);
  for (int i = 0; i < k; ++i) {
    cin >> intervals[i].first >> intervals[i].second;
  }
  fentree t;
  t.init(n);
  t.set(1, 1);
  for (int i = 2; i <= n; ++i) {
    long long int s = 0;
    for (int j = 0; j < k; ++j) {
      int a = max(0, i - intervals[j].second);
      int b = min(i - 1, i - intervals[j].first);
      s += t.get(a, b);
    }
    t.set(i, s);
  }
  printf("%lld\n", t.get(n, n) % 998244353);
}
int main() {
  int T = 1;
  while (T--) {
    solve();
  }
}
