#CF2077F. AND 与 OR 操作

AND 与 OR 操作

F. AND 与 OR 操作
每个测试点的时间限制:5 秒
内存限制:1024 MB

假设有两个数组 ccdd,长度均为 kk
称数对 (c,d)(c, d)好的,如果可以通过任意次以下操作将 cc 变为 dd

  • 选择两个不同的下标 iijj1i,jk1 \le i, j \le kiji \neq j)以及一个非负整数 xx0x<2300 \le x < 2^{30})。
    然后进行如下变换:
    • ci:=ci & xc_i := c_i \ \&\ x,其中 &\& 表示按位与操作。
    • cj:=cj  xc_j := c_j \ | \ x,其中 | 表示按位或操作。

现在给定两个数组 aabb,长度均为 nn,每个元素都是不超过 mm 的非负整数。

你可以对这两个数组执行任意次以下两种操作:

  1. 选择一个下标 ii1in1 \le i \le n),将 aia_i 增加 11ai:=ai+1a_i := a_i + 1)。
  2. 选择一个下标 ii1in1 \le i \le n),将 bib_i 增加 11bi:=bi+1b_i := b_i + 1)。

注意,在执行操作过程中,aabb 的元素可能暂时超过 mm

求使得 (a,b)(a, b) 成为好的数对所需的最少操作次数。


输入格式
每个测试点包含多个测试用例。
第一行包含一个整数 tt1t1041 \le t \le 10^4),表示测试用例的数量。
接下来每个测试用例的描述如下:

  • 第一行包含两个整数 nnmm1n,m21061 \le n, m \le 2 \cdot 10^6),分别表示数组长度以及数组中元素的最大可能值。
  • 第二行包含 nn 个整数 a1,a2,,ana_1, a_2, \dots, a_n0aim0 \le a_i \le m),表示数组 aa
  • 第三行包含 nn 个整数 b1,b2,,bnb_1, b_2, \dots, b_n0bim0 \le b_i \le m),表示数组 bb

此外,保证所有测试用例中 nn 的总和以及 mm 的总和均不超过 21062 \cdot 10^6


输出格式
对于每个测试用例,输出一个整数,表示使 (a,b)(a, b) 成为好的数对所需的最少操作次数。


样例输入

5
4 3
0 1 2 3
0 1 2 3
3 32
8 9 32
8 6 32
5 64
5 7 16 32 64
4 8 16 32 64
4 11
9 1 4 3
8 11 6 2
5 10
7 9 5 4 2
3 10 6 5 9

样例输出

0
2
2
0
1

样例解释

  1. 第一个样例中,已经有 a=ba = b
  2. 第二个样例中,可以对 i=2i=2 执行两次操作 2。数组 bb 变为 [8,8,32][8,8,32],此时 (a,b)(a,b) 是好的。
  3. 第三个样例中,可以先对 i=1i=1 执行操作 2,再对 i=2i=2 执行操作 1,可以证明无法用少于 2 步达成。