#include<stdio.h>
#include<math.h>
long long int pom[75001];
void merge_sort(long long int a[], long long int poc, long long int kraj)
{
	long long int p=poc+((kraj-poc)/2);
	if(kraj-poc>1)
	{
		merge_sort(a,poc,p);
		merge_sort(a,p,kraj);
	}
	long long int i=poc,j=p,k;
	for(k=0;k<(kraj-poc);k++)
	{
		if(a[i]<a[j] && i<p && j<kraj)
		{
			pom[k]=a[i];
			i++;
			continue;
		}
		
		if(a[j]<a[i] && i<p && j<kraj)
		{
			pom[k]=a[j];
			j++;
			continue;
		}
		
		if(i==p && j<kraj)
		{
			pom[k]=a[j];
			j++;
			continue;
		}
		
		if(j==kraj && i<p)
		{
			pom[k]=a[i];
			i++;
			continue;
		}
		k++;
	}
	
	for(k=0;k<(kraj-poc);k++)
	a[poc+k]=pom[k];
}

long long int NZD(long long int a, long long int b)
{
	if(a%b==0)
	return b;
	
	return(b,a%b);
}

main()
{
	long long int T,N[6],M[6],A[6][75001],B[6][75001],i,j,k,br;
	scanf("%lld",&T);
	
	for(i=0;i<T;i++)
	{
		scanf("%lld%lld",&N[i],&M[i]);
		for(j=0;j<N[i];j++)
		scanf("%lld",&A[i][j]);
		
		for(j=0;j<M[i];j++)
		scanf("%lld",&B[i][j]);
	}
	
	for(i=0;i<T;i++)
	{
		merge_sort(A[i],0,N[i]);
		merge_sort(B[i],0,M[i]);
	}
	
	
	for(i=0;i<T;i++)
	{
		br=0;
		k=abs(A[i][0]-A[i][1]);
		for(j=1;j<N[i]-1;j++)
		k=NZD(k,abs(A[i][j]-A[i][j+1]));
		
		for(j=0;j<M[i];j++)
		if((B[i][j]-A[i][0])%k==0)
		br++;
		
		if(br>0)
		printf("0 \n");
		
		if(br==0)
		printf("1 \n");
	}
}