#include <bits/stdc++.h>
using namespace std;
template <class... Args>
void Input(Args &...args) {
  (cin >> ... >> args);
}
template <class T>
void InputArray(std::size_t size, T &t) {
  t.resize(size);
  for (auto &e : t) {
    cin >> e;
  }
}
template <class... Args>
void InputArray(std::size_t size, Args &...args) {
  (InputArray(size, args), ...);
}
template <class... Args>
void InputVerticalArray(std::size_t size, Args &...args) {
  (args.resize(size), ...);
  for (int i = 0; i < size; i++) {
    ((cin >> args[i]), ...);
  }
}
template <class... Args>
void Output(const Args &...args) {
  ((cout << args << ' '), ...) << endl;
}
template <class... Args>
void OutputVertical(const Args &...args) {
  ((cout << args << endl), ...);
}
template <class T>
void OutputArray(const T &t) {
  for (const auto &e : t) {
    cout << e << ' ';
  }
  cout << endl;
}
template <class... Args>
void OutputArray(const Args &...args) {
  (OutputArray(args), ...);
}
template <class... Args>
void OutputVerticalArray(const Args &...args) {
  for (int i = 0; i < min({args.size()...}); i++) {
    ((cout << args[i] << ' '), ...) << endl;
  }
}
int main() {
  constexpr long long mod = 998244353;
  int n, k;
  Input(n, k);
  vector<int> l, r;
  InputVerticalArray((k), l, r);
  int s[200001]{};
  auto it = s;
  for (int(i) = 0; (i) < (k); (i)++) {
    for (int j = l[i]; j <= r[i]; j++) {
      *it++ = j;
    }
  }
  int dp[200000]{};
  dp[0] = 1;
  for (int i = 1; i < n; i++) {
    for (auto &(e) : (s)) {
      if (e == 0) break;
      if (i - e >= 0) {
        dp[i] += dp[i - e];
        dp[i] %= mod;
      }
    }
  }
  Output(dp[n - 1]);
  return 0;
}
