#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <cmath>
#include <cctype>
#include <ctime>
#include <climits>
#include <cfloat>
#include <cstdint>
#include <cstddef>
#include <cinttypes>
#include <memory>
#include <iostream>
#include <sstream>
#include <iomanip>
#include <vector>
#include <array>
#include <valarray>
#include <string>
#include <list>
#include <set>
#include <map>
#include <unordered_set>
#include <unordered_map>
#include <stack>
#include <bitset>
#include <queue>
#include <complex>
#include <tuple>
#include <utility>
#include <functional>
#include <algorithm>
#include <numeric>

using namespace std;

const double EPS = 1e-10;
const int64_t INF = 1e9;
typedef long long ll;

const int QMAX = 500010;
const ll MOD = 998244353;

// 繧ｻ繧ｰ繝｡繝ｳ繝域惠繧呈戟縺､繧ｰ繝ｭ繝ｼ繝舌Ν驟榊・
int n;
ll dat[QMAX];

// 蛻晄悄蛹・void init(int _n)
{
	// 邁｡蜊倥・縺溘ａ・瑚ｦ∫ｴ謨ｰ繧・縺ｮ縺ｹ縺堺ｹ励↓
	n = 1;
	while (n < _n) n *= 2;

	// 蜈ｨ縺ｦ縺ｮ蛟､繧・縺ｫ
	for (int i = 0; i < 2 * n - 1; i++) dat[i] = 0;
}

// k逡ｪ逶ｮ縺ｮ蛟､(0-indexded)繧呈ｱゅａ繧・ll val(int k)
{
	// 闡峨・遽轤ｹ
	k += n - 1;
	ll ans = dat[k];
	while (k > 0)
	{
		k = (k - 1) / 2;
		ans = (ans + dat[k]) % MOD;
	}
}

// [a, b)縺ｫx繧貞刈縺医ｋ
// 蠕後ｍ縺ｮ譁ｹ縺ｮ蠑墓焚縺ｯ・瑚ｨ育ｮ励・邁｡蜊倥・縺溘ａ縺ｮ蠑墓焚
// k縺ｯ遽轤ｹ縺ｮ逡ｪ蜿ｷ・畦, r縺ｯ縺昴・遽轤ｹ縺啓l, r)縺ｫ蟇ｾ蠢懊▼縺・※縺・ｋ縺薙→繧定｡ｨ縺・// 縺励◆縺後▲縺ｦ・悟､悶°繧峨・query(a, b, 0, 0, n)縺ｨ縺励※蜻ｼ縺ｶ
void add(int a, int b, ll x, int k, int l, int r)
{
	// [a, b)縺ｨ[l, r)縺御ｺ､蟾ｮ縺励※縺ｪ縺・	if (r <= a || b <= l) return;

	// [a, b)縺啓l, r)繧貞ｮ悟・縺ｫ蜷ｫ繧薙〒縺・ｋ繧後・・後％縺ｮ遽轤ｹ縺ｮ蛟､
	if (a <= l && r <= b) {
		dat[k] = (dat[k] + x) % MOD;
	} else {
		// 縺昴≧縺ｧ縺ｪ縺代ｌ縺ｰ
		add(a, b, x, k * 2 + 1, l, (l + r) / 2);
		add(a, b, x, k * 2 + 2, (l + r) / 2, r);
	}
}

int main()
{
	int m, k;
	int l[10], r[10];
	scanf("%d%d", &m, &k);
	for (int i = 0; i < k; ++i) {
		scanf("%d%d", &l[i], &r[i]);
	}

	init(m+2);

	add(1, 2, 1, 0, 0, n);
	for (int i = 1; i < m; ++i) {
		ll a = val(i);
		for (int j = 0; j < k; ++j) {
			if (i + l[j] > n) continue;
			int ed = min(i + r[j], n);
			add(i + l[j], ed + 1, a, 0, 0, n);
		}

		/*
		for (int j = 0; j <= m; ++j) {
			printf("%d: %d\n", j, val(j));
		}
		printf("\n");
		*/
	}

	printf("%lld\n", val(m));

	return 0;
}
