A. 奶龙龟速路

Medium

时间限制:5000 ms

内存限制:1024 MiB

题面

奶龙国计划修建一张举世闻名的🐢速路网,连接全国的 nn 座城市。

然而,奶龙国的真实距离计算方式可不是普通的加减乘除,而是一种由奶龙科学家 sha7dow 发现的奇异规则:

当城市 AABB 的真实距离为 s1s_1,城市 BBCC 的真实距离为 s2s_2 时,奶龙们认为城市 AA 经过 BB 再到 CC 的真实距离并不是简单的 s1+s2s_1 + s_2,而是:

s((ss1)(ss2))s - ((s - s_1) \land (s - s_2))

其中,ss 是一个名为 sha7dow 常数 的宇宙极限值,而符号 \land 表示 按位与(bitwise AND) 运算。

为了让全国的奶龙更容易进行计算,sha7dow 提出了一个聪明的概念——奶式距离

如果一条道路的真实距离是 dd,那么它的奶式距离定义为 sds - d

也就是说,奶式距离越大,说明两地的真实距离越短。

奶龙国的🐢速路网正一条条修建中,而奶龙市民们每天都好奇地打听:“从我家到那座城市,现在最短的路要多长呢?”

当然,他们问的其实是——两座城市之间的最长奶式距离

你的任务是:在道路不断建成的过程中,实时回答奶龙市民们的询问。

输入格式

第一行包含两个整数 nnqq,分别表示奶龙国的城市数量和事件数量,保证 2n1032 \leq n \leq 10^31q1061 \leq q \leq 10^6

接下来共有 qq 行,每行表示一个事件,格式如下:

  • 若以 + 开头,后接三个整数 u,v,wu, v, w,表示修建了一条连接城市 uu 和城市 vv 的🐢速路,其奶式距离为 ww。保证 1u,vn1 \leq u, v \leq nuvu \neq v0w<2120 \leq w < 2^{12}

  • 若以 ? 开头,后接两个整数 u,vu, v,表示一位奶龙市民询问城市 uu 与城市 vv 之间的最长奶式距离。保证 1u,vn1 \leq u, v \leq nuvu \neq v

输出格式

对于每个 '?' 事件,输出一行一个整数,表示对应询问的答案(若两城市间不连通,则输出-1)。

样例

输入

3 4
+ 1 2 3
+ 2 3 5
? 1 3
? 1 2

输出

1
3