#CF339D. Xenia 与位运算

Xenia 与位运算

D. Xenia 与位运算
每次测试时间限制:2 秒
内存限制:256 兆字节

新手程序员 Xenia 有一个由 2n2^n 个非负整数组成的序列 aaa1,a2,,a2na_1, a_2, \dots, a_{2^n}。Xenia 正在学习位运算。为了更好地理解它们的工作原理,Xenia 决定为序列 aa 计算某个值 vv

具体来说,计算值 vv 需要多次迭代。

  • 第一次迭代:Xenia 写出一个新序列 $a_1 \operatorname{or} a_2,\ a_3 \operatorname{or} a_4,\ \dots,\ a_{2^n-1} \operatorname{or} a_{2^n}$,包含 2n12^{n-1} 个元素。也就是说,她写出相邻元素的按位或。
  • 第二次迭代:Xenia 写出第一次迭代后得到序列的相邻元素的按位异或。
  • 第三次迭代:Xenia 写出第二次迭代后得到序列的相邻元素的按位或。
  • 依此类推,按位异或按位或交替进行。最终,她得到一个只含一个元素的序列,这个元素就是 vv

我们来看一个例子。假设序列 a=(1,2,3,4)a = (1, 2, 3, 4)。那么写出所有变换:
$(1, 2, 3, 4) \to (1 \operatorname{or} 2 = 3,\ 3 \operatorname{or} 4 = 7) \to (3 \operatorname{xor} 7 = 4)$
结果是 v=4v = 4

现在,你得到了 Xenia 的初始序列。但是仅计算给定序列的值 vv 太简单了,因此你还会收到额外的 mm 个查询。每个查询是一对整数 p,bp, b。查询 p,bp, b 表示你需要执行赋值 ap=ba_p = b。每次查询之后,你需要输出新序列 aa 对应的新值 vv

输入
第一行包含两个整数 nnmm1n171 \le n \le 171m1051 \le m \le 10^5)。
下一行包含 2n2^n 个整数 a1,a2,,a2na_1, a_2, \dots, a_{2^n}0ai<2300 \le a_i < 2^{30})。
接下来的 mm 行,每行包含一个查询。第 ii 行包含整数 pi,bip_i, b_i1pi2n1 \le p_i \le 2^n0bi<2300 \le b_i < 2^{30})——第 ii 个查询。

输出
输出 mm 个整数——第 ii 个整数表示第 ii 次查询之后序列 aa 的值 vv

示例
输入

2 4
1 6 3 5
1 4
3 4
1 2
1 2

输出

1
3
3
3

说明
有关位运算的更多信息,可以参考这个链接:http://en.wikipedia.org/wiki/Bitwise_operation