题目描述
小明找来了一个 $2^n$ 长度的数组。它第一次先对所有相邻两个数执行 `|` 操作,得到一个 $2^{n-1}$ 长度的数组。也就是说,如果一开始时 $a[1],a[2],\cdots,a[2^n]$,执行操作后,会得到 $a[1]|a[2]$,$a[3]|a[4], \cdots,a[2^n-1]|a[2^n]$。
第二次操作,小明会将所有相邻两个数执行 `^` 操作,得到一个 $2^{n-2}$ 长度的数组,假如第一次操作后的数组是 $b[1],b[2],\cdots,b[2^{n-1}]$,执行操作后会变成 $b[1] \hat{ } b[2]$,$b[3] \hat{ } b[4],\cdots,b[2^{n-1}-1] \hat{ } [b^{n-1}]$。
第三次操作,小明仍然将执行 `|` 操作,第四次小明执行 `^` 操作。如此交替进行。
小明还会执行 $Q$ 次修改操作。每次修改原先的 $2^n$ 长度的数组中的某一个数,对于每次修改操作,你需要输出 $n$ 次操作后(最后一定只剩下唯一一个数)剩下的那个数是多少。
输入
第一行两个数 $n,Q$。
接下来一行 $2^n$ 个数 $a_i$ 表示一开始的数组。
接下来 $Q$ 行,每行两个数 $x_i,y_i$,表示小明这次的修改操作是将 $a_{x_i}$ 改成 $y_i$。
输出
$Q$行,表示每次修改操作后执行 $n$ 次操作后剩下的那个数的值。
样例输入输出
输入#1
复制
2 4
1 6 3 5
1 4
3 4
1 2
1 2
提示
【样例解释】
第一次修改,$4,6,3,5\to 6,7\to 1$。
第二次修改,$4,6,4,5\to 6,5 \to 3$。
第三次修改,$2,6,4,5 \to 6,5 \to 3$。
第四次修改,$2,6,4,5 \to 6,5\to 3$。
【数据范围】
对于 $30\%$ 的数据,$n \leq 17$,$Q=1$。
对于另外 $20\%$ 的数据,$n \leq 10$,$Q \leq 1000$。
对于另外 $30\%$ 的数据,$n \leq 12$,$Q \leq 100000$。
对于 $100\%$ 的数据,$1 \leq n \leq 17$,$1 \leq Q \leq 10^5$,$1 \leq x_i \leq 2^n$,$0 \leq y_i \leq 2^{30}$,$0 \leq a_i \leq 2^{30}$。