#include <bits/stdc++.h>
using namespace std;
static const int INTINF = (INT_MAX >> 1);
static const long long LLINF = (LLONG_MAX >> 1);
static const int MAX = 201001;
static const long long MOD = 998244353;
template <class T>
inline bool chmax(T& a, T b) {
  if (a < b) {
    a = b;
    return 1;
  }
  return 0;
}
template <class T>
inline bool chmin(T& a, T b) {
  if (a > b) {
    a = b;
    return 1;
  }
  return 0;
}
template <class T>
inline T int_ceil(T a, T b) {
  T res = a / b;
  if (a % b != 0) res++;
  return res;
}
template <typename T>
using min_priority_queue = priority_queue<T, vector<T>, greater<T> >;
string to_string(string s) { return '"' + s + '"'; }
string to_string(bool b) { return b ? "true" : "false"; }
template <size_t N>
string to_string(bitset<N> bs) {
  string res;
  for (size_t i = 0; i < N; ++i) res += '0' + bs[i];
  return res;
}
string to_string(vector<bool> v) {
  string res = "{";
  for (bool e : v) res += to_string(e) + ", ";
  return res += "}";
}
template <class T, class U>
string to_string(pair<T, U> p);
template <class C>
string to_string(C c) {
  string res = "{";
  for (auto e : c) res += to_string(e) + ", ";
  return res += "}";
}
template <class T, class U>
string to_string(pair<T, U> p) {
  return "(" + to_string(p.first) + ", " + to_string(p.second) + ")";
}
void debug() { cerr << '\n'; }
template <class Head, class... Tail>
void debug(Head head, Tail... tail) {
  cerr << '\t' << to_string(head), debug(tail...);
}
long long dp[MAX];
long long dp_minus[MAX];
int main(int argc, const char* argv[]) {
  std::cout << std::fixed << std::setprecision(15);
  memset(dp, 0, sizeof(dp));
  dp[0] = 1;
  dp_minus[1] = 1;
  int N, K;
  cin >> N >> K;
  vector<pair<int, int> > lr(K);
  for (int i = 0; i < (K); ++i) {
    int l, r;
    cin >> l >> r;
    lr[i] = {l, r};
  }
  for (int i = 0; i < (N); ++i) {
    for (int j = 0; j < (K); ++j) {
      dp[i + lr[j].first] = (dp[i + lr[j].first] + dp[i]) % MOD;
      dp_minus[i + lr[j].second + 1] =
          (dp_minus[i + lr[j].second + 1] + dp[i]) % MOD;
    }
    dp[i + 1] = (dp[i] + dp[i + 1]) % MOD;
    dp[i + 1] = (dp[i + 1] - dp_minus[i + 1]) % MOD;
    while (dp[i + 1] < 0) dp[i + 1] += MOD;
  }
  cout << dp[N - 1] << endl;
  return 0;
}
