3437 - 序列

你有一个长为 n 的序列 a,现在要对其进行 m 次操作。操作分为两种:

  1. 给定两个整数 l,r,表示询问 lr 的最大连续子段和。
  2. 给定三个整数 l,r,k,表示将 lra_i 都按位或上一个 k

对于所有数据,n,m\leq 10^5-2^{30}\leq a_i,k<2^{30}1\leq l\leq r\leq n

注意:负数按照 32 位补码取按位或。

输入

输入共 m+2 行。

1 行输入 2 个正整数 n,m

2 行输入 n 个整数 a_1\ldots a_n

接下来 m 行,每行先输入 1 个正整数 opop=1 输入 2 个整数 l,r 表示一次询问,否则输入 3 个整数 l,r,k 表示一次修改。

输出

输出共若干行,每行共 1 个整数,表示询问的答案。

样例

输入

15 15
512 -65 33554432 32 8194 13 16 2 67108872 131072 -8192 8194 16 2048 4096 
1 3 5
1 10 10
2 1 7 671367424
1 8 14
1 5 11
2 13 13 335579137
2 2 13 5376
1 2 5
2 5 6 8392768
1 1 2
2 2 14 201335872
2 1 14 0
1 11 12
1 8 12
1 4 9

输出

33562658
131072
67242012
2081350441
2047680290
671367936
201340226
805489228
3373416393
时间限制 1 秒
内存限制 512 MB
讨论 统计
上一题 下一题