#include<iostream>
using namespace std;
void Spoj(int l,int d,int s,long long a[]){
	int i,j,k,n1=s-l+1,n2=d-s;
	long long L[n1],D[n2];
	for(i=0;i<n1;i++)L[i]=a[l+i];
	for(j=0;j<n2;i++)D[j]=a[s+1+j];
	i=j=0;k=l;
	while(i<n1&&j<n2){
		if(L[i]<D[j]){
			a[k]=L[i];
			k++;i++;
		}
		else{
			a[k]=D[j];
			k++;j++;
		}
	}
	while(i<n1){
		a[k]=L[i];
		k++;i++;
	}
	while(j<n2){
		a[k]=D[j];
		k++;j++;
	}
	
}
void MS(int l,int d, long long a[]){
	int s=(l+d)/2;
	if(l<d){
		MS(l,s,a);
		MS(s+1,d,a);
		Spoj(l,s,d,a);
	}
}
int Mz(int N, int M, long long A[], long long B[]){
	int i,j; long long X=A[0]-A[1];
	for(i=1;i<N-1;i++)if(X>A[i+1]-A[i]&&X%(A[i+1]-A[i])!=0)X=A[i+1]-A[i];
	for(i=0;i<N;i++){
		for(j=0;j<M;j++)if(B[j]==A[i]+X||B[j]==A[i]-X)return 0;
	}
	return 1;
}
int h, T, g, N, M,r[5];
long long  A[75000], B[75000];
int main(){
	cin>>T;
	for(g=0;g<T;g++){
		cin>>N>>M;
		for(h=0;h<N;h++)cin>>A[h];
		for(h=0;h<M;h++)cin>>B[h];
		MS(0,N-1,A);
		MS(0,M-1,B);
		r[g]=Mz(N,M,A,B);
	}
	for(g=0;g<T;g++)cout<<r[g]<<endl;
	return 0;
}