#include <stdio.h>

main(){
int T;

scanf("%d",&T);
if(T > 5 || T < 1){
    printf("0");
    return;
}

int N,M;
int niz[T];
int brojac = 0;
while(brojac < T){
    scanf("%d %d",&N,&M);
    if(N<2 || M>75000){
        niz[brojac] = 0;
        brojac++;
        continue;
    }
    int niz1[N];
    for(int i = 0; i < N;i++){
        scanf("%d",&niz1[i]);
    }

    int niz2[M];
    for(int i = 0;i < M;i++){
        scanf("%d",&niz2[i]);
    }
    srediNiz(niz1,N);
    srediNiz(niz2,M);

   niz[brojac] = daLiPostojiX(niz1,N,niz2,M);

    brojac++;

}

printf("\n\n");
for(int i = 0;i<T;i++){
    printf("%d\n",niz[i]);
}
}

void srediNiz(int* niz,int brojEl){
    int p;
    for(int i = 0;i<brojEl-1;i++){
        for(int j = i+1;j<brojEl;j++){
            if(niz[i]>niz[j]){
                p = niz[i];
                niz[i] = niz[j];
                niz[j] = p;
            }
        }
    }
}

int daLiPostojiX(int niz1[],int N,int niz2[],int M){
    int min = nadjiMin(niz1,N);


    int razlika;
    int j;
    for(int i = 0; i<N-1;i++){
        j = i+1;
            razlika = niz1[j] - niz1[i];
            if(razlika % min != 0)
                return 0;


            for(int p = niz1[i];p<=niz1[j];p=p+min){
                for(int s = 0;s<M;s++){
                    if(p == niz2[s])
                        return 0;

                }
            }


    }


    return 1;
}

int nadjiMin(int niz[],int N){
    int min = 9999999;
    int razlika;
    int j;
for(int i = 0;i<N-1;i++){
    j = i+1;
    razlika =niz[j] - niz[i];
    if(min > razlika)
       min = razlika;

}

return min;
}