#include <bits/stdc++.h>
const int INF = 1e9;
const int MOD = 998244353;
using namespace std;
int dx[4] = {1, 0, -1, 0};
int dy[4] = {0, 1, 0, -1};
int main() {
  long long n, k;
  cin >> n >> k;
  vector<pair<long long, long long>> vpii;
  for (int i = 0; i < int(k); i++) {
    long long a, b;
    cin >> a >> b;
    vpii.push_back({a, b});
  }
  vector<long long> memo(n + 1, 0);
  memo[1] = 1;
  vector<vector<int>> start(n + 1);
  vector<vector<int>> stop(n + 1);
  set<int> si;
  for (int i = 1; i < int(n + 1); i++) {
    if (!start[i].empty()) {
      for (int j = 0; j < int(start[i].size()); j++) {
        si.insert(start[i][j]);
      }
    }
    for (auto x : si) {
      memo[i] += memo[x];
      memo[i] %= MOD;
    }
    for (int j = 0; j < int(k); j++) {
      if (i + vpii[j].first <= n) start[i + vpii[j].first].push_back(i);
      if (i + vpii[j].second <= n) stop[i + vpii[j].second].push_back(i);
    }
    if (!stop[i].empty()) {
      for (int j = 0; j < int(stop[i].size()); j++) {
        si.erase(stop[i][j]);
      }
    }
  }
  cout << memo[n] << endl;
}
