#!/usr/bin/env python3
# coding:utf-8

def main():
    n, k = map(int, input().split())
    lrs = []
    for i in range(k):
        l, r = input().split()
        lrs.append([int(l), int(r)])
    stdOut = solve(n, k, lrs)
    print(stdOut)


"""
方針
和集合の要素の和がn-1と等しくなる組み合わせを考える
和集合の要素の個数の最大はn-1なので、単純に総当たりで行うとO(n^n)



"""

mod = 998244353


def solve(n, k, lrs):
    # 和集合Sの作成
    S = []
    for i in range(k):
        lr = lrs[i]
        l = lr[0]
        r = lr[1]
        for j in range(r - l + 1):
            S.append(l + j)
    S.sort()

    # 参考:https://wakabame.hatenablog.com/entry/2017/09/10/211428
    # p:割られる数 a:整数列 A:求めたい部分和 N:aの要素数
    # 例(998244353, [1, 3, 4], 4, 3) => 4 (1111,13,31,4)
    # この世に出ている部分和数え上げ問題は重複
    p = mod
    a = S
    A = n - 1
    N = len(S)
    dp = [0 for i in range(A + 1)]
    dp[0] = 1
    # dp[i]:部分和iの組み合わせ数
    for i in range(A + 1):
        for ai in a:
            if ai <= i:
                dp[i] += dp[i - ai]
    return dp[-1] % mod


if __name__ == "__main__":
    main()
