#include <bits/stdc++.h>
using namespace std;
int dX[4] = {0, 0, -1, 1};
int dY[4] = {-1, 1, 0, 0};
int N, K;
const int MOD = 998244353;
int L[100], R[100];
long long bit[400000];
void update(int N, int idx, long long inc) {
  idx++;
  while (idx <= N) {
    bit[idx] = (bit[idx] + inc) % MOD;
    idx += idx & (-idx);
  }
}
long long query(int idx) {
  idx++;
  long long ans = 0;
  while (idx > 0) {
    ans = (ans + bit[idx]) % MOD;
    idx -= idx & (-idx);
  }
  return ans;
}
int main() {
  cin >> N >> K;
  for (int k = 0; k < K; k++) {
    cin >> L[k] >> R[k];
  }
  memset(bit, 0, sizeof bit);
  update(N, N - 1, 1);
  for (int i = N - 2; i >= 0; i--) {
    long long value = 0;
    for (int k = 0; k < K; k++) {
      int l = i + L[k];
      int r = min(N - 1, i + R[k]);
      if (l >= N) continue;
      value += query(r) - query(l - 1);
    }
    update(N, i, value);
  }
  cout << query(0) % MOD << '\n';
}
