编程题
### 问题描述
有一个长度为 $n$ 的数组 $a$ ,第 $i$ 个元素是 $ai$ 。
现在我们要对数组进行 $m$ 次操作,操作分两种:
1. 每次操作给出 $l,r,x,y$,我们需要把数组中第 $l$ 个数到第 $r$ 个数的二进制位下的第 $l$ 到第 $r$ 位翻转(从 $0$ 开始,最右边是第 $0$ 位)。比如把 $4(0100)$ 的第 $1$ 位到第 $3$ 位翻转,就是 $10(1010)$ 。
2. 每次操作给出 $x$,我们需要输出数组中第 $x$ 个数的值。
### 输入格式
第一行包含 $2$ 个正整数 $n$ 和 $m$ ($1\leq n \leq 10^5$,$1\leq k \leq 10^{5}$)。
第二行包含 $n$ 个正整数 $a_i$($0\leq a_i \leq 10^6$)。
接下来 $m$ 行,每行开头为操作类型 $op$ ($1\leq op \leq 2$)。
如果 $op=1$ ,将会给出 $l,r,x,y$($1\leq l \leq r \leq 10^5$,$0\leq l \leq r \leq 21$)。
如果 $op=2$ ,将会给出 $x$($1\leq x \leq 10^5$)。
### 输出格式
对于每个操作 $2$ ,输出 $1$ 个整数,这个整数是数组中第 $x$ 个数的值。
### 样例输入
```text
5 3
1 2 3 4 5
1 1 3 2 4
2 1
2 2
```
### 样例输出
```text
29
30
```
### 说明
**样例说明**
原数组为:$1(00001),2(00010),3(00011),4(00100),5(00101)$ 。
翻转第 $1$ 个数到第 $3$ 个数的二进制位下的第 $2$ 到第 $4$ 位。
此时数组为:$29(11101),30(11110),31(11111),4(00100),5(00101)$ 。