#include <bits/stdc++.h>
long long powmod(long long a, long long b) {
  long long res = 1;
  a %= 998244353;
  assert(b >= 0);
  for (; b; b >>= 1) {
    if (b & 1) res = res * a % 998244353;
    a = a * a % 998244353;
  }
  return res;
}
using namespace std;
long long ft[2000100];
long long n;
void upd(long long id, long long val) {
  while (id <= n) {
    ft[id] += val;
    ft[id] %= 998244353;
    id += (id & (-id));
  }
}
long long qry(long long id) {
  long long ret = 0;
  while (id > 0) {
    ret += ft[id];
    ret %= 998244353;
    id -= id & (-id);
  }
  return ret % 998244353;
}
long long qry(long long l, long long r) {
  return (qry(r) + 998244353 - qry(l - 1)) % 998244353;
}
int main() {
  ios::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
  long long k;
  cin >> n >> k;
  vector<pair<long long, long long> > p;
  for (long long i = 0; i < k; ++i) {
    long long l, r;
    cin >> l >> r;
    for (long long j = l; j <= min(n - 1, r); ++j) {
      upd(n - j, 1);
    }
    p.push_back({l, r});
  }
  sort(p.begin(), p.end());
  for (long long i = n - 1; i >= 1; --i) {
    long long aux = n - i - 1;
    long long sum = 0;
    auto it = upper_bound(p.begin(), p.end(), make_pair(aux, aux - 1));
    for (long long j = 0; j < k && p[j] != *it; ++j) {
      sum += qry(i + p[j].first, i + p[j].second);
      sum %= 998244353;
    }
    if (it != p.end() && aux >= (*it).first) {
      sum += qry(i + (*it).first, i + aux);
      sum %= 998244353;
    }
    upd(i, sum);
  }
  cout << qry(1, 1) << "\n";
  return 0;
}
