#include <iostream>
#include <cmath>
#include <vector>
using namespace std;

int nzd(int a, int b){
	if(a%b==0)
		return b;
	else
		return nzd(b, a%b);	
}

int provera(vector<long long int> v, long long int nzdr, bool atrue){
	if(atrue){
		for(int i=0; i<v.size(); i++){
			if(v[i]%nzdr!=0)
				return 0;
		}
		return 1;
	}
	else{
		for(int i=0; i<v.size(); i++){
			if(v[i]%nzdr==0)
				return 0;
		}
		return 1;
	}
}

int main(){
	int t;
	cin >> t;
	vector<long long int> a;
	vector<long long int> b;
	vector<long long int> razlike;
	vector<int> resenja;
	for(int i=0; i<t; i++){
		int n, m, ya=0, yb=0;
		cin >> n >> m;
		for(int j=0; j<n; j++){
			long long int x;
			cin >> x;
			a.push_back(x);
		}
		for(int j=0; j<m; j++){
			long long int x;
			cin >> x;
			b.push_back(x);
		}
		
		long long int poc = a[0];
		long long int nzdr = poc - a[1];
		for(int j=1; j<a.size(); j++){
			long long int r = abs(poc - a[j]);
			razlike.push_back(r);
			nzdr = nzd(nzdr, r);		
		}
		if(nzdr!=1)
			ya = provera(razlike, nzdr, true);
		else
			ya = 0;	
		
		razlike.clear();	
		for(int j=0; j<b.size(); j++){
			long long int r = abs(poc - b[j]);
			razlike.push_back(r);
		}
		yb = provera(razlike, nzdr, false);

		if(ya==1 && yb==1)
			resenja.push_back(1);
		else
			resenja.push_back(0);
		
		a.clear();
		b.clear();
		razlike.clear();	
	}
	for(int i=0; i<resenja.size(); i++)
		cout << resenja[i] << endl;
}