#include <iostream>

using namespace std;

void zameni(long long int* a, long long int* b)
{
    long long int t = *a;
    *a = *b;
    *b = t;
}

int Partition (long long int a[], int l, int h)
{
    long long int pivot = a[h];
    int i = (l - 1);
    for (int j = l; j <= h - 1; j++)
    {
        if (a[j] < pivot)
        {
            i++;
            zameni(&a[i], &a[j]);
        }
    }
    zameni(&a[i + 1], &a[h]);
    return (i + 1);
}

void quickSort(long long int a[], int l, int h)
{
    if (l < h)
    {
        int pi = Partition(a, l, h);
        quickSort(a, l, pi - 1);
        quickSort(a, pi + 1, h);
    }
}

long long int NZD(long long int a, long long int b)
{
    while(b!=0)
    {
        int r = a;
        a = b;
        b%=a;
    }
    return a;
}

long long int NZDNiza(long long int a[], int N)
{
    long long int rez = a[0];
    for(int i = 1; i < N; i++)
    {
        rez = NZD(a[i], rez);
        if(rez == 1) return 1;
    }
    return rez;
}

int Postoji(int N, int M, long long int a[], long long int b[])
{
    int provera = 0;
    long long int x[N-1];
    for(int i = 0;i<N-1;i++)
    {
        x[i]=a[i+1]-a[0];
    }
    if(x[0]!=1)
    {
        long long int nzd = NZDNiza(x, N-1);
        if(nzd != 1) provera = 1;
        for(int i = 0; i < M; i++)
        {
            if((b[i] % nzd) == (a[0] % nzd))
            {
                provera = 0;
                break;
            }
        }
    }
    return provera;
}
int main()
{
    int T;
    cin >> T;
    int N, M;
    int p[T];
    for(int i = 0; i < T; i++)
    {
        cin >> N >> M;
        long long int a[N], b[M];
        for(int i = 0; i < N; i++)
        {
            cin >> a[i];
        }
        for(int i = 0; i < M; i++)
        {
            cin >> b[i];
        }
        quickSort(a,0,N-1);
        p[i] = Postoji(N, M, a, b);
    }
    for(int i = 0; i < T-1; i++)
    {
        cout << p[i] <<endl;
    }
    cout << p[T-1];
    return 0;
}