#include<iostream>

using namespace std;

bool funkcija(int *prihvacene,int *rastojanja,int n,int min)
{
    for(int i=0;i<n;++i)
    {
        rastojanja[i] = abs(prihvacene[i]-prihvacene[i+1]);
        if(rastojanja[i]%min != 0)
            return false;
    }
    return true;

}

bool funkcija2(int *odbijene,int m,int min)
{
            for(int i=0;i<m;++i)
                if(odbijene[i]%min == 0)
                    return false;
            return true;
}

bool funkcija3(int *prihvacene,int *odbijne,int min,int n,int m)
{
    for(int i=0;i<m;++i){
        for(int j=0;j<n;++j){
            if((abs(odbijne[i]-prihvacene[j]))%min == 0){
                return false;}
        }
    }

    return true;
}

void FICA()
{
    int T;
    cin>>T;
    int n,m;
    long long int prihvacene[n];
    long long int rastojanja[n-1];
    long long int odbijene[m];
    int niz[T];


    for(int i=0;i<T;++i){
        cin>>n>>m;
        
        int min = INT_MAX;

        cin>>prihvacene[0];

        for(int j=1;j<n;++j){

                cin>>prihvacene[j];

            if(abs(prihvacene[j]-prihvacene[j-1]) < min)
                min = abs(prihvacene[j]-prihvacene[j-1]);


            }

        for(int j=0;j<m;++j)
            cin>>odbijene[i];

        if(funkcija(prihvacene,rastojanja,n-1,min))
        {
            if(funkcija2(odbijene,m,min))
                niz[i] = 0;
            else niz[i] = 1;

        }
        else niz[i] = 0;

        //******************************************
        //for(int p=0;p<n;++p)
            //cout<<niz[p]<<"    ";

        if(funkcija3(prihvacene,odbijene,min,n,m)){
            niz[i] = 1;
        }
        else niz[i] = 0;

       // cout<<min<<"                    "<<endl;
    }
    for(int i=0;i<T;++i)
        cout<<niz[i]<<endl;
}

int main(void)
{
    FICA();
    return 0;
}