和移位
时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 256 M,其他语言512 M
64bit IO Format: %lld

题目描述



何意味的拼音是“hyw”
你倒过来看就是“mhy”,这下你懂了吧

你一觉醒来,全世界的何意味水平下降一百万倍。
你觉得上面图片中的“和溢位”太简单了,于是随手做出一道更难的“和移位”,却不知何时身边围了一群同学,他们都张大了嘴巴,鸦雀无声,以为自己出现了幻觉。没想到这所大学里竟然会有这般顶尖人物!
“何意味……何意味?和溢位?和移位??!”
 “和移位!和移位?和移位…… ”
 而教授也呆住了,哪怕是他,也只是能勉强看懂上图中的“和溢位”,而他已经因此已经拿到了终身教职!至于你做出的这道“和移位”,他只在最顶尖的何意味会议上见过。
 教授老泪纵横地赶忙与你握手,激动地说,“和移位!” 在周围人崇拜佩服的目光下,你十分得意,想到自己名声大噪后成为世界第一“和移位”大师的画面激动不已,忍不住轻哼起来,而下面就是那道“和移位”。
给定一个长度为 n 的排列 P(下标从 1 开始),定义对排列向右循环平移 k 位得到的新排列 P_{k} :即把原来位于位置 i 的元素移动到位置 ((i+k-1)\bmod n)+1。现在有 q 次询问,每次询问给你一个正整数 x ,你需要求出使 P[i]+P_{k}[i]=x 在 1 \leq i \leq n 中成立的下标个数最多的整数 k ,如果存在多个 k 满足该条件,则输出最小的那个。
排列】长度为 n排列是由 1 \sim n 这 n 个整数、按任意顺序组成的数组,其中每个整数恰好出现一次。例如,\{2,3,1,5,4\} 是一个长度为 5 的排列,而 \{1,2,2\} 和 \{1,3,4\} 都不是排列,因为前者存在重复元素,后者包含了超出范围的数。

输入描述:

输入包含 q+2 行。
第一行输入两个整数 n,q\ (1 \leq n \leq 2000), (1 \leq q \leq 10^5),以空格分隔,分别表示排列中的元素数量,以及询问次数。
第二行输入 n 个互不相同的整数 a_1,a_2,\cdots,a_n\ (1 \leq a_i \leq n) 代表排列元素。
接下来 q 行,每行一个正整数 x \ (1 \leq x \leq 10^9)

输出描述:

输出 q 行。第 i 行(1 \leq i \leq q 为第 i 次询问的答案。
示例1

输入

复制
3 1
1 2 3
3

输出

复制
1

说明

将排列向右循环移动1位后,排列变成\{3,1,2\},此时只有第二位 2+1=3
示例2

输入

复制
3 1
1 2 3
10

输出

复制
0

说明

因为所有 k 的结果都为0, k 取最小值,所以答案为0。
示例3

输入

复制
7 4
3 7 1 4 5 2 6
8
5
10
7

输出

复制
1
1
0
3
示例4

输入

复制
10 4
10 9 8 7 6 5 4 3 2 1
11
10
19
5

输出

复制
1
2
1
1

备注: