存在长度为 n 的a1,,an
      和长度为m 的b1....bm
   |   运算  : 1000|0110=1110   ,即:   保留所有的1    
   ^  运算:1110^1000=0110  , 即:一样为1的位变为0,其他位有1为1
由于位运算是针对数字的二进制下的每一位单独的运算,所以我们单独抽出数字b中某一位进行模拟,可以得出以下规律:

①当数字b的第 t 位为1时:
         则进行对所有a1~an进行ai=ai∣b 的操作时
         a1~an的每个数字的第 t 位都会变成1
        则x的第t位只取决于 n的奇偶性
        当n%2==1时:
                        x的第 t 位为1
         当n%2==0时:
                         x的第t 位为 0 


②当数字b的第 t 位为0 时:
          则进行对所有a1~an进行ai=ai∣b 的操作时
          a1~an的每个数字的第 t 位都不变
          则对于x的第t位无影响



综上我们可以发现:只有b中的1可以影响x的值,同时  ③当n为偶数时,每次进行操作都会使x中的0增多或不变,即 : 使x减小或不变
                                                                                         当n为奇数时,每次进行操作都会使x中的1增多或不变,即 : 使x增大或不变

所以我们可以很快得出结论,当n为偶数时:x_max=a1^a2^a3,,,,^an
                                              当n为奇数时:x_min=a1^a2^a3,,,,^an


 要求    n为奇数时的最大值    和  n为偶数时的最小值    则 由结论③的出,要对a1..an进行最多次的操作  即要使b1,,,bm都进行ai=ai∣b 的操作     

由于 |  是保留所有的1 的操作,所以 算得  b_max=b1|b2|...|bm   来获取最后能够通过操作得到的最多的  1

则  当n为奇数时:x_max=x|b_max     ( x=a1^a2^a3,,,,^an)
当n为偶数时:由于b_max的操作使得b_max中为1的位  在x中为0,而b_max中为0的位,在x中不发生改变
所以可以得到   当n为偶数时:x_min=x&(~b_max)    

python3
time=int(input())
for i in range(time):
    [n,m]=[int(i) for i in input().split()]
    a_list=[int(i) for i in input().split()]
    b_list=[int(i) for i in input().split()]
    x1=a_list[0]
    bm=b_list[0]
    for i in a_list[1:]:  #得到x
        x1=x1^i 

    for i in b_list[1:]:#得到b_max
        bm=bm|i 
    if n%2==1:       #奇偶类型分类
        x_min=x1
        x_max=x1|bm
    elif n%2==0:
        x_max=x1
        x_min=x1 & (~bm)
    print(x_min,x_max)



这不是我写的但思想应该差不多吧

c++
#include<bits/stdc++.h>
using namespace std;
int a[200050],b[200050];
int main()
{
    int t;
    cin>>t;
    while(t--)
    {
        int n,m;
        cin>>n>>m;
        int ans1=0;
        for(int i=1;i<=n;i++){cin>>a[i];ans1^=a[i];}
        for(int i=1;i<=m;i++)
        {
            cin>>b[i];
            b[i]|=b[i-1];
        }
        for(int i=1;i<=n;i++){a[i]|=b[m];}
        int ans2=0;
        for(int i=1;i<=n;i++){ans2^=a[i];}
        cout<<min(ans1,ans2)<<" "<<max(ans1,ans2)<<endl;
    }
}