#include <bits/stdc++.h>
using namespace std;
const long long mo = 998244353;
const int N = int(2e5) + 10;
int n, K, a[11][2];
template <typename T>
inline T add(T x, T y) {
  return (x += y, x >= mo) ? x -= mo : x;
}
template <typename T>
inline T dec(T x, T y) {
  return (x -= y, x < 0) ? x += mo : x;
}
template <typename T>
inline T mul(T x, T y) {
  return T((long long)x * y % mo);
}
int sum[N * 2], tag[N * 2];
void mt(int p) { sum[p] = add(sum[p << 1], sum[p << 1 | 1]); }
void fill(int p, int l, int r, int v) {
  sum[p] = add(sum[p], mul(r - l + 1, v));
  tag[p] = add(tag[p], v);
}
void pd(int p, int l, int r) {
  int mid = (l + r) >> 1;
  fill(p << 1, l, mid, tag[p]);
  fill(p << 1 | 1, mid + 1, r, tag[p]);
  tag[p] = 0;
}
void upd(int p, int l, int r, int el, int er, int v) {
  if (el <= l && r <= er) return fill(p, l, r, v), void();
  pd(p, l, r);
  int mid = (l + r) >> 1;
  if (el <= mid) upd(p << 1, l, mid, el, er, v);
  if (er >= mid + 1) upd(p << 1 | 1, mid + 1, r, el, er, v);
  mt(p);
}
int ask(int p, int l, int r, int ep) {
  if (l == r) return sum[p];
  pd(p, l, r);
  int mid = (l + r) >> 1;
  if (ep <= mid) return ask(p << 1, l, mid, ep);
  if (ep >= mid + 1) return ask(p << 1 | 1, mid + 1, r, ep);
}
int main() {
  cin >> n >> K;
  for (int i = (1), iend = (K); i <= iend; i++) cin >> a[i][0] >> a[i][1];
  upd(1, 1, n, 1, 1, 1);
  for (int i = (1), iend = (n - 1); i <= iend; i++) {
    int x = ask(1, 1, n, i);
    for (int j = (1), jend = (K); j <= jend; j++) {
      int l = i + a[j][0], r = i + a[j][1];
      if (l > n) continue;
      l = min(l, n), r = min(r, n);
      upd(1, 1, n, l, r, x);
    }
  }
  cout << ask(1, 1, n, n);
  return 0;
}
