#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
vector<long long> a,b;
bool mozeA(long long min){
	for(long long i=1;i<a.size();i++){
		if((a[i]-a[i-1])%min!=0){
			return false;
		}
	}
	return true;
}

bool mozeB(long long min){
	long long n=a[0];
	while(n>b[0]){
		n-=min;
	}
	for(long long i=0;i<b.size();i++){
		if((b[i]-n)%min==0){
			return false;
		}
	}
	return true;
}

int main(int argc, char** argv){
	ios_base::sync_with_stdio(false);
	long long t,i,m,n,j;
	long long min,p,x,y;
	cin>>t;
	for(i=0;i<t;i++){
		cin>>n>>m;
		for(j=0;j<n;j++){
			cin>>p;
			a.push_back(p);
		}
		sort(a.begin(),a.end());
		x=a[1];
		min=a[1]-a[0];
		for(j=2;j<n;j++){
			y=a[j];
			if((y-x)<min){
				min=(y-x);
			}
			x=y;
		}
		
		if(!mozeA(min)){
			min=1;
		}
		for(j=0;j<m;j++){
			cin>>p;
			b.push_back(p);
		}
		sort(b.begin(),b.end());
		if(!mozeB(min)){
			cout<<0<<endl;
		}
		else{
			cout<<1<<endl;
		}
		a.clear();
		b.clear();
	}
	return 0;
}