Xenia 初学者程序员有一个序列 a,包括2n非负整数:一个a1,a2,...,a2n.Xenia目前正在研究位运算。为了更好地理解它们是如何工作的,Xenia决定为a计算一些值v。
也就是说,计算值 v 需要多次迭代。在第一次迭代中,Xenia 编写一个新序列一个a1或a2,a3或4,...,a2n-1或2n,包括2N-1元素。换句话说,她写下序列 a 的相邻元素的逐位 OR。在第二次迭代中,Xenia 写入第一次迭代后获得的序列的相邻元素的按位独占 OR。在第三次迭代中,Xenia 写入第二次迭代后获得的序列的相邻元素的按位 OR。等等;按位独占 OR 和按位 OR 交替的运算。最后,她得到一个由一个元素组成的序列,该元素是v。
让我们考虑一个例子。假设序列 a=(1,2,3,4)。然后让我们写下所有变换 (1,2,3,4) → (1 或 2=3,3或4=7) → (3xor7=4)。结果是 v=4。
你会得到Xenia的初始序列。但是计算给定序列的值 v 太容易了,因此会为您提供额外的 m 查询。每个查询都是一对整数 p,b。查询 p,b 表示您需要执行分配一个ap=b.每次查询后,您需要为新序列 a 打印新值 v。
Xenia the beginner programmer has a sequence a, consisting of 2n non-negative integers: a1,a2,...,a2n. Xenia is currently studying bit operations. To better understand how they work, Xenia decided to calculate some value v for a.
2 4 1 6 3 5 1 4 3 4 1 2 1 2
1 3 3 3
第一行包含两个整数 n 和 m (1≤n≤17.1≤m≤105).下一行包含2n整数一个a1,a2,...,a2n (0≤ai<230).接下来的每一行都包含查询。第 i 行包含整数pi,bi (1≤pi≤2n,0≤bi<230)− 第 i 个查询。
打印 m 个整数 − 第 i 个整数表示第 i 个查询后序列 a 的值 v。
Input
2 4
1 6 3 5
1 4
3 4
1 2
1 2
Output
1
3
3
3
注意
有关位操作的更多信息,您可以按照以下 li
2 4
1 6 3 5
1 4
3 4
1 2
1 2
1
3
3
3