#include <iostream>

using namespace std;
void sortiraj(unsigned long long int a[],int n,unsigned long long int *p)
{
    for (int i=0;i<n-1;i++)
    {
        int x=i;
        for (int j=i+1;j<n;j++)
        {
            if (a[x]>a[j])
            {
                x=j;
            }
        }
        swap(a[x],a[i]);
    }
    for (int i=0;i<n;i++)
    {
        *p=a[i];
        p++;
    }
}
unsigned long long int minimum(unsigned long long int a[],int n)
{
    unsigned long long int minimum1;
    minimum1=a[0];
    for (int i=1;i<n;i++)
    {
        if (a[i]<minimum1)
        {
            minimum1=a[i];
        }
    }
    return minimum1;
    //treba mi za razlike izmedju elemenata  niza
}
unsigned long long int razlike(unsigned long long int a[],int n)
{
    unsigned long long int k[n];
    int c=0;
    for (int i=n-1;i>=1;i--)
    {
        k[c]=a[i]-a[i-1];
        c++;
    }
    return minimum(k,n);
}
bool daLiMoze(unsigned long long int a[],int n)
{
   bool b=false;
   unsigned long long int koef=a[n-1]/a[0];
   unsigned long long int x=razlike(a,n);
   for (int i=1;i<n;i++)
   {
       int brojac=1;
       while (brojac<=koef)
       {
           if (a[i]==x*brojac+a[0])
           {
               b=true;
               break;
           }
           else
            b=false;
           brojac++;
       }
   }
   return b;
}
bool daLiMoze1(unsigned long long  int a[],unsigned long long int a1[],int n,int m)
{
    bool b=false;
    unsigned long long int niz[a[n-1]];
    unsigned long long int s=a[0];
    niz[0]=a[0];
    int j=1;
    while (s<a[n-1])
    {
        s=s+razlike(a,n);
        niz[j]=s;
        j++;
    }
    for (int i=0;i<m;i++)
    {
        for (int q=0;q<j;q++)
        {
            if (a1[i]==niz[q])
            {
                return b=false;
            }
            else
                b=true;
        }
    }
    return b;
}
int main()
{
    int t;
    cin>>t;
    int ispis[t];
    bool b=false;
    bool b1=false;
    for (int i=0;i<t;i++)
    {
        b=false;
        b1=false;
        int n,m;
        cin>>n>>m;
        unsigned long long int uspele[n];
        unsigned long long int neuspele[m];
        for (int j=0;j<n;j++)
        {
            cin>>uspele[j];
        }
        unsigned long long int *p;
        p=&uspele[0];
        sortiraj(uspele,n,p);
        b=daLiMoze(uspele,n);

        for (int j=0;j<m;j++)
        {
            cin>>neuspele[j];
        }
        b1=daLiMoze1(uspele,neuspele,n,m);
        if (b&&b1==true)
        {
            ispis[i]=1;
        }
        else
            ispis[i]=0;
    }
    for (int i=0;i<t;i++)
    {
        cout<<ispis[i]<<endl;
    }

    return 0;
}