#include <iostream>
using namespace std;
typedef unsigned long long broj;

broj nzd(broj a, broj b)
{
    if(a<b) return nzd(b,a);
    if(b==0)    return a;
    return nzd(b,a%b);
}

int main()
{
    int t;
    scanf("%d",&t);
    for(int beskorisni_brojac=0;beskorisni_brojac<t;beskorisni_brojac++)
    {
        int n,m;
        scanf("%d%d",&n,&m);
        broj a[n];
        int max=0;
        for(int i=0;i<n;i++)
        {
            cin>>a[i];
            if(a[i]>a[max]) max=i;
        }
        //stavi najveci element na kraj niza
        broj temp=a[n-1];
        a[n-1]=a[max];
        a[max]=temp;

        broj delilac=a[n-1]-a[0];
        for(int i=1;i<n-1&&delilac!=1;i++)
        {
            delilac=nzd(a[n-1]-a[i],delilac);
        }
        broj offset=a[0]%delilac;

        broj b[m];
        for(int i=0;i<m;cin>>b[i++]);
        
        //b ne sme biti delilac * neki_broj + offset
        //drugim recima: b % delilac != offset
        bool valja=true;
        for(int i=0;i<m&&valja;i++)
        {
            
            valja= b[i] % delilac != offset;
        }
        if(valja)   cout<<"1"<<endl;
        else        cout<<"0"<<endl;
    }
    return 0;
}