#include <bits/stdc++.h>
using ll = long long;
const ll mod = 998244353;
using namespace std;
struct node {
  ll val = 0;
  ll lz = 0;
} st[1 << 19];
void push(int p, int l = 0, int r = 0) {
  st[p].val %= mod;
  st[p].val += st[p].lz * (r - l + 1);
  st[p].val %= mod;
  st[p * 2].lz += st[p].lz;
  st[p * 2].lz %= mod;
  st[p * 2 + 1].lz += st[p].lz;
  st[p * 2 + 1].lz %= mod;
  st[p].lz = 0;
}
void update(int p, int l, int r, int i, int j, ll val) {
  push(p);
  if (r < i || j < l) return;
  if (i <= l && r <= j) {
    st[p].lz = val;
    push(p, l, r);
  } else {
    int m = (l + r) / 2;
    update(p * 2, l, m, i, j, val);
    update(p * 2 + 1, m + 1, r, i, j, val);
  }
}
int qry(int p, int l, int r, int i) {
  push(p);
  if (l == r) {
    return st[p].val;
  } else {
    int m = (l + r) / 2;
    if (i <= m) {
      return qry(p * 2, l, m, i);
    } else {
      return qry(p * 2 + 1, m + 1, r, i);
    }
  }
}
int main() {
  int n, k;
  cin >> n >> k;
  vector<pair<int, int>> segs;
  while (k--) {
    int l, r;
    cin >> l >> r;
    segs.emplace_back(l, r);
  }
  update(1, 0, n - 1, 0, 0, 1);
  for (int i = 0; i < n - 1; i++) {
    for (auto p : segs) {
      int l, r;
      l = p.first;
      r = p.second;
      if (i + l < n) {
        update(1, 0, n - 1, i + l, min(n - 1, i + r),
               qry(1, 0, n - 1, i) % mod);
      }
    }
  }
  cout << qry(1, 0, n - 1, n - 1);
}
