#include <iostream>

typedef long long lld;

lld nzd(lld a,lld b){
    if(a==0) return b;
    if(b==0) return a;

    lld rez = b;
    while(a%rez!=0){
        b = a%b;
        a = rez;
        rez = b;
    }
    return rez;
}

lld nzdA(lld* a,int n){
    lld rez = nzd(a[0],a[1]);
    for(int i=1;i<n;++i){
        if(rez==1)
            return rez;
        if(a[i]%rez!=0)
            rez=nzd(a[i],rez);
    }
    return rez;
}

int checkB(lld* b,int m,lld rezA){
    if(rezA==1)
        return 0;
    for(int i=0;i<m;++i){
        if(b[i]%rezA==0)
            return 0;
    }
    return 1;
}

int main ()
{
    std::ios::sync_with_stdio(false);
    std::cin.tie(0);
    std::cout.tie(0);
    std::cerr.tie(0);

    int t,n,m;
    lld* a;
    lld* b;

    std::cin >> t;
    int rez[t] = {0};

    for(int k=0;k<t;++k){
        std::cin >> n >> m;
        a = new lld[n];
        b = new lld[m];
        std::cin >> a[0];
        for(int i=1;i<n;++i){
            std::cin >> a[i];
            a[i]-=a[0];
        }
        for(int i=0;i<m;++i){
            std::cin >> b[i];
            b[i]-=a[0];
        }
        a[0]=0;
        rez[k] = checkB(b, m, nzdA(a, n));
    }

    for(int i=0;i<t;++i)
        std::cout << rez[i] << "\n";

    return 0;
}