#include<iostream>
#include<cstdio>
#include<cstring>
#define LL long long
using namespace std;
const int maxn=100;
LL extend_gcd(LL a,LL b,LL &x,LL &y);
int main()
{
//freopen("in.txt","r",stdin);
int t;
cin>>t;
while(t--){
LL n,mm,i,a[maxn],m[maxn];
cin>>n>>mm;
for(i=1;i<=mm;i++)
cin>>m[i];
for(i=1;i<=mm;i++)
cin>>a[i];
LL x,y,a1=a[1],m1=m[1],flag=0;
for(i=2;i<=mm;i++){//方程组合并为一个方程
LL a2=a[i],m2=m[i];
LL gcd=extend_gcd(m1,m2,x,y);
if((a2-a1)%gcd){//有解条件
flag=1;
break;
}
x*=(a2-a1)/gcd;
if(x<=0)x+=m2;//求出最小的大于0的x
a1+=m1*x;
m1=m1*m2/gcd;
a1=(a1%m1+m1)%m1;
}
if(a1>n||flag)cout<<0<<endl;
else{
LL k;
for(k=0;k*m1+a1<=n;k++);
if(a1==0)k--;
cout<<k<<endl;
//cout<<(n-a1)/m1+1-(!a1?1:0)<<endl;
}
}
}
LL extend_gcd(LL a,LL b,LL &x,LL &y){
if(b==0){
x=1;
y=0;
return a;
}
LL d=extend_gcd(b,a%b,y,x);
y=y-a/b*x;
return d;
}