异或图
题号:NC205348
时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 256 M,其他语言512 M
64bit IO Format: %lld

题目描述

牛妹是一个喜欢无向图的女孩子。

牛妹现在有 个点构成的点集 ,每个点有点权

牛妹想用这 个点构造 个无向图 。对于第 个无向图,牛妹指定了一个参数 。牛妹规定 当且仅当 ,其中 表示二进制按位异或运算

牛妹并不想知道这 个无向图具体长什么样,所以对于第 个无向图,你只需要告诉牛妹 的最短路径长度。

输入描述:

第一行两个整数 ,表示点集大小和无向图数量。
第二行 n 个整数 a_i 表示第 i 个点的点权。
接下来 q 行,第 i 行三个整数 k_i 表示第 i 个无向图的参数,x_i, y_i 表示询问最短路的起点和终点。

输出描述:

输出 q 行,第 i 行一个整数,表示第 i 个无向图中 x_iy_i 的最短路长度。若 x_iy_i 不连通则输出 -1。
示例1

输入

复制
5 5
2 4 4 1 1
6 1 3
6 2 3
6 1 4
5 4 5
2 4 5

输出

复制
1
2
-1
2
-1