#include <iostream>
#include <algorithm>

using namespace std;

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


int nzdNiza(long long int arr[], int n)
{
	int x1 = arr[0];
	for (int i = 1; i < n; i++)
	{
		x1 = nzd(arr[i], x1);

		if (x1 == 1)
		{
			return 1;
		}
	}
	return x1;
}

bool zad(long long int a[], long long int b[], int n, int m) {
	int nzd1;
	long long int delta[100];
	sort(a, a + n, greater<long long int>());
	for (int j = 0; j < n - 1; j++) {
		delta[j] = a[j] - a[j + 1];
	}
	nzd1 = nzdNiza(delta, n-1);
	
	for (int j = 0; j < m; j++) {
		if ((b[j] - a[0]) % nzd1 == 0) {
			return 0;
		}
	}
	return 1;
}
int main()
{
	int t,n,m;
	long long int a[100];
	long long int b[100];	
	int x[100];
		
	for (int j = 0; j < 100; j++) {
		a[j] = 0;
		b[j] = 0;
	}
	cin >> t;
	
	for (int i = 0; i < t; i++) {
		cin >> n >> m;
		for (int j = 0; j < n; j++) {
			cin >> a[j];
		}		
		for (int k = 0; k < m; k++) {
			cin >> b[k];			
		}		
		x[i] = zad(a, b, n, m);
	}
	
	for (int j = 0; j < t; j++) {
		cout << x[j] << endl;
	}
	
	return 0;
}