编程题
### 问题描述
小然在一次冒险中,发现了一种由 $N$ 个数字组成的神秘阵列 $A$。一开始,阵列中的所有数字都是 0。
小然可以进行 $Q$ 种类型的操作,每种操作由两个整数 $l_i$ 和 $r_i$(满足 $1 \leq l_i \leq r_i \leq N$)描述,操作的具体内容如下:
- 对于满足 $l_i \leq j \leq r_i$ 的每个 $j$,将 $A_j$ 设置为 $A_j \oplus 1$,其中 $\oplus$ 表示按位异或操作。
现在,小然想知道,通过选择并执行这些操作的子集(可能一个也不选择,可能全部选择),他能得到多少种不同的阵列?由于答案可能非常大,请你将答案对 $998244353$ 取模后输出。
### 输入格式
输入的第一行包含两个整数 $N$ 和 $Q$,表示阵列的长度和可以进行的操作的数量。
接下来 $Q$ 行,每行包含两个空格分隔的整数 $l_i$ 和 $r_i$,表示一种操作。
### 输出格式
输出一行,包含一个整数,表示通过执行一些操作得到的不同阵列的数量对 $998244353$ 取模后的结果。
### 样例输入
```text
2 2
1 2
1 1
```
### 样例输出
```text
4
```
### 说明
在这个测试用例中,可能得到的阵列有 $[0, 0]、[0, 1]、[1, 1]$ 和 $[1, 0]$。
### 评测数据范围
$1 \leq N, Q \leq 10^5$,$1 \leq l_i \leq r_i \leq N$。