#include<iostream>
using namespace std;

int NZD (int a, int b){ // nzd funkcija
	while(a != b)
    {
        if(a > b){
            a -= b;
        }
        else{
            b -= a;
        }
    }
    return a;
}
int main()
{
	int broj_ucenika;
	cin >> broj_ucenika; // ucitavanje broja ucenik
	int broj_dobrih_godina[5], broj_losih_godina[5], najmanja_dobra_godina, brojac;
	long vrednost_dobrih_godina[75000], vrednost_losih_godina[75000], razlike_najmanjom_sa_ostalima[74999], nzd, nzd_broj_faktora , nzd_faktori[nzd_broj_faktora];
	bool da_li, da_li_2 = false, fiksac = false;
	int resenja[5];
	
	for (int i = 0; i < broj_ucenika; i++){ // za svaki broj dobrih i losih godina
		
		cin >> broj_dobrih_godina[i] >> broj_losih_godina[i]; // ucitavanja broja dobrih i losih godina
	//	cout << "one" << endl;
		for (int y = 0; y < broj_dobrih_godina[i]; y++){
			cin >> vrednost_dobrih_godina[y]; // ucitavanja vrednosti dobrih godina
		//	cout << "two" << endl;
			if (y == 0){ // odredjujem pocetnu vrednost
				najmanja_dobra_godina = vrednost_dobrih_godina[y];
			}
		
				
			if (najmanja_dobra_godina > vrednost_dobrih_godina[y]){ // nalazenje najmanja godine
				najmanja_dobra_godina = vrednost_dobrih_godina[y];
			}
		//	cout << y <<endl;
		//	cout << broj_dobrih_godina[i]<<endl;
		//	cout << vrednost_dobrih_godina[y]<<endl;
		}
		
		for (int z = 0; z < broj_losih_godina[i]; z++){
			cin >> vrednost_losih_godina[z];
		}
		
		for (int y = 0; y < broj_dobrih_godina[i]; y++){
				
			if (vrednost_dobrih_godina[y] == najmanja_dobra_godina){
				fiksac = true;
				continue;
			}
			if (fiksac){
				razlike_najmanjom_sa_ostalima[y-1] = vrednost_dobrih_godina[y] - najmanja_dobra_godina;
			}
			else{
				razlike_najmanjom_sa_ostalima[y] = vrednost_dobrih_godina[y] - najmanja_dobra_godina;
			}
		}
		
			
			
		
		
		nzd = NZD(razlike_najmanjom_sa_ostalima[0], razlike_najmanjom_sa_ostalima[1]); // pocetna vrednost
	//	cout <<"been here"<<endl;
		for (int y = 2; y < broj_dobrih_godina[i] - 1; y++){ // 
			nzd = NZD(nzd, razlike_najmanjom_sa_ostalima[y]);
	//		cout << "four" << endl;
		}
		//cout <<"yuhuy "<<nzd<<endl;
	
		if (nzd < 2){ // kada nema nzd
			da_li = false;
		
		}
		else{
			da_li = true;
		}
		nzd_broj_faktora = 0;
		for(int y = 2; y <= nzd; y++){
        	if (nzd % y == 0){
            	nzd_broj_faktora++;
     //   cout << "five" << endl;
    }
    }
		for (int y = 0; y < nzd_broj_faktora; y++){
	//		cout << "six" << endl;
			for(int q = 2; q <= nzd; q++){
	//			cout << "seven" << endl;
				if (nzd % q == 0){
					nzd_faktori[y] = q;
				}
			}
		}
		
		for (int y = 0; y <nzd_broj_faktora; y++){
			brojac = 0;
		//	cout << "eight" << endl;
			for (int z = 0; z < broj_losih_godina[i]; z++){
		//		cout << "nine" << endl;
				if ((vrednost_losih_godina[z] - najmanja_dobra_godina) % nzd_faktori[y] == 0){
					brojac++;
				}
				//cout <<vrednost_losih_godina[z]<<endl;
				//cout << najmanja_dobra_godina<<endl<<nzd_faktori[y]<<endl;
				//cout << "yey "<<brojac<<endl;
				if (brojac == 0){
				da_li_2 = true;
			}
			}
			
		}
		if((!da_li_2)&&(!da_li)){
			resenja[i] = 0;
		}
		else if ((da_li_2)&&(!da_li)){
			resenja[i] = 0;
		}
		else if((!da_li_2)&&(da_li)){
			resenja[i] = 0;
		}
		else if((da_li_2)&& (da_li_2)){
			resenja[i] = 1;
		}
		
	}
	for (int i = 0; i < broj_ucenika; i++){
		cout << resenja[i] << endl;
	}
}