//#pragma GCC optimize("Ofast,unroll-loops")
//#pragma GCC target("avx2,tune=native")
#include <bits/stdc++.h>
using namespace std;
#define file "o"
#define ff(i, a, b) for(auto i=(a); i<=(b); ++i)
#define ffr(i, b, a) for(auto i=(b); i>=(a); --i)
#define nl "\n"
#define ss " "
#define pb emplace_back
#define fi first
#define se second
#define sz(s) (int)s.size()
#define all(s) (s).begin(), (s).end()
#define ms(a,x) memset(a, x, sizeof (a))
#define cn continue
#define re exit(0)
typedef long long ll;
typedef unsigned long long ull;
typedef long double ld;
typedef vector<int> vi;
typedef vector<ll> vll;
typedef pair<int, int> pii;
typedef pair<ll, ll> pll;
typedef vector<pii> vpii;
typedef vector<pll> vpll;
mt19937_64 rng(chrono::steady_clock::now().time_since_epoch().count());
ll ran(ll l, ll r)
{
return uniform_int_distribution<ll> (l, r)(rng);
}
inline void rf()
{
ios_base::sync_with_stdio(false);
cin.tie(nullptr); cout.tie(nullptr);
if(fopen(file".inp","r"))
{
freopen(file".inp","r",stdin);
freopen(file".out","w",stdout);
}
}
const int mod=998244353;
const int maxn=3e5+15;
const ll inf=5e16;
template<typename T> inline void add(T &x, const T &y)
{
x+=y;
if(x>=mod) x-=mod;
if(x<0) x+=mod;
}
template<typename T> inline bool maxi(T &a, T b)
{
if(a>=b) return 0;
a=b; return 1;
}
template<typename T> inline bool mini(T &a, T b)
{
if(a<=b) return 0;
a=b; return 1;
}
int n, m, a[maxn], b[maxn];
vpii va, vb;
inline ll cal(int a, int b)
{
if(b<0) a=-a, b=-b;
int g=__gcd(a, b);
return 1ll*(a/g)*mod+(b/g);
}
struct myhash
{
static uint64_t splitmix64(uint64_t x)
{
x+=0x9e3779b97f4a7c15ULL;
x=(x^(x>>30))*0xbf58476d1ce4e5b9ULL;
x=(x^(x>>27))*0x94d049bb133111ebULL;
return x^(x>>31);
}
size_t operator()(uint64_t x) const
{
static const uint64_t FIXED=chrono::steady_clock::now().time_since_epoch().count();
return splitmix64(x+FIXED);
}
};
unordered_map<int, int, myhash> freq;
unordered_map<ll, int, myhash> cnt;
signed main()
{
rf();
int tt; cin>>tt;
while(tt--)
{
cin>>m>>n;
ff(i, 1, m) cin>>a[i];
ff(i, 1, n) cin>>b[i];
cnt.clear(); va.clear(); vb.clear();
freq.clear(); freq.reserve(1000);
ff(i ,1, m) ++freq[a[i]];
for(auto x:freq) va.pb(x);
freq.clear(); freq.reserve(1000);
ff(i ,1, n) ++freq[b[i]];
for(auto x:freq) vb.pb(x);
cnt.reserve(m*n);
for(auto x:va) for(auto y:vb) cnt[cal(x.fi, y.fi) ]+=min(x.se, y.se);
int ans=0;
for(auto x:cnt) maxi(ans, x.se);
cout<<m+n-ans<<nl;
}
re;
}
Ly8jcHJhZ21hIEdDQyBvcHRpbWl6ZSgiT2Zhc3QsdW5yb2xsLWxvb3BzIikKLy8jcHJhZ21hIEdDQyB0YXJnZXQoImF2eDIsdHVuZT1uYXRpdmUiKQojaW5jbHVkZSA8Yml0cy9zdGRjKysuaD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCiNkZWZpbmUgZmlsZSAibyIKI2RlZmluZSBmZihpLCBhLCBiKSBmb3IoYXV0byBpPShhKTsgaTw9KGIpOyArK2kpCiNkZWZpbmUgZmZyKGksIGIsIGEpIGZvcihhdXRvIGk9KGIpOyBpPj0oYSk7IC0taSkKI2RlZmluZSBubCAiXG4iCiNkZWZpbmUgc3MgIiAiCiNkZWZpbmUgcGIgZW1wbGFjZV9iYWNrCiNkZWZpbmUgZmkgZmlyc3QKI2RlZmluZSBzZSBzZWNvbmQKI2RlZmluZSBzeihzKSAoaW50KXMuc2l6ZSgpCiNkZWZpbmUgYWxsKHMpIChzKS5iZWdpbigpLCAocykuZW5kKCkKI2RlZmluZSBtcyhhLHgpIG1lbXNldChhLCB4LCBzaXplb2YgKGEpKQojZGVmaW5lIGNuIGNvbnRpbnVlCiNkZWZpbmUgcmUgZXhpdCgwKQoKdHlwZWRlZiBsb25nIGxvbmcgbGw7CnR5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIHVsbDsKdHlwZWRlZiBsb25nIGRvdWJsZSBsZDsKdHlwZWRlZiB2ZWN0b3I8aW50PiB2aTsKdHlwZWRlZiB2ZWN0b3I8bGw+IHZsbDsKdHlwZWRlZiBwYWlyPGludCwgaW50PiBwaWk7CnR5cGVkZWYgcGFpcjxsbCwgbGw+IHBsbDsKdHlwZWRlZiB2ZWN0b3I8cGlpPiB2cGlpOwp0eXBlZGVmIHZlY3RvcjxwbGw+IHZwbGw7CgptdDE5OTM3XzY0IHJuZyhjaHJvbm86OnN0ZWFkeV9jbG9jazo6bm93KCkudGltZV9zaW5jZV9lcG9jaCgpLmNvdW50KCkpOwpsbCByYW4obGwgbCwgbGwgcikKewogICAgcmV0dXJuIHVuaWZvcm1faW50X2Rpc3RyaWJ1dGlvbjxsbD4gKGwsIHIpKHJuZyk7Cn0KCmlubGluZSB2b2lkIHJmKCkKewogICAgaW9zX2Jhc2U6OnN5bmNfd2l0aF9zdGRpbyhmYWxzZSk7CiAgICBjaW4udGllKG51bGxwdHIpOyBjb3V0LnRpZShudWxscHRyKTsKICAgIGlmKGZvcGVuKGZpbGUiLmlucCIsInIiKSkKICAgIHsKICAgICAgICBmcmVvcGVuKGZpbGUiLmlucCIsInIiLHN0ZGluKTsKICAgICAgICBmcmVvcGVuKGZpbGUiLm91dCIsInciLHN0ZG91dCk7CiAgICB9Cn0KCmNvbnN0IGludCBtb2Q9OTk4MjQ0MzUzOwpjb25zdCBpbnQgbWF4bj0zZTUrMTU7CmNvbnN0IGxsIGluZj01ZTE2OwoKdGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIHZvaWQgYWRkKFQgJngsIGNvbnN0IFQgJnkpCnsKICAgIHgrPXk7CiAgICBpZih4Pj1tb2QpIHgtPW1vZDsKICAgIGlmKHg8MCkgeCs9bW9kOwp9Cgp0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgYm9vbCBtYXhpKFQgJmEsIFQgYikKewogICAgaWYoYT49YikgcmV0dXJuIDA7CiAgICBhPWI7IHJldHVybiAxOwp9Cgp0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgYm9vbCBtaW5pKFQgJmEsIFQgYikKewogICAgaWYoYTw9YikgcmV0dXJuIDA7CiAgICBhPWI7IHJldHVybiAxOwp9CgppbnQgbiwgbSwgYVttYXhuXSwgYlttYXhuXTsKdnBpaSB2YSwgdmI7CgppbmxpbmUgbGwgY2FsKGludCBhLCBpbnQgYikKewogICAgaWYoYjwwKSBhPS1hLCBiPS1iOwogICAgaW50IGc9X19nY2QoYSwgYik7CiAgICByZXR1cm4gMWxsKihhL2cpKm1vZCsoYi9nKTsKfQoKc3RydWN0IG15aGFzaAp7CiAgICBzdGF0aWMgdWludDY0X3Qgc3BsaXRtaXg2NCh1aW50NjRfdCB4KQogICAgewogICAgICAgIHgrPTB4OWUzNzc5Yjk3ZjRhN2MxNVVMTDsKICAgICAgICB4PSh4Xih4Pj4zMCkpKjB4YmY1ODQ3NmQxY2U0ZTViOVVMTDsKICAgICAgICB4PSh4Xih4Pj4yNykpKjB4OTRkMDQ5YmIxMzMxMTFlYlVMTDsKICAgICAgICByZXR1cm4geF4oeD4+MzEpOwogICAgfQogICAgc2l6ZV90IG9wZXJhdG9yKCkodWludDY0X3QgeCkgY29uc3QKICAgIHsKICAgICAgICBzdGF0aWMgY29uc3QgdWludDY0X3QgRklYRUQ9Y2hyb25vOjpzdGVhZHlfY2xvY2s6Om5vdygpLnRpbWVfc2luY2VfZXBvY2goKS5jb3VudCgpOwogICAgICAgIHJldHVybiBzcGxpdG1peDY0KHgrRklYRUQpOwogICAgfQp9OwoKdW5vcmRlcmVkX21hcDxpbnQsIGludCwgbXloYXNoPiBmcmVxOwp1bm9yZGVyZWRfbWFwPGxsLCBpbnQsIG15aGFzaD4gY250OwoKc2lnbmVkIG1haW4oKQp7CiAgICByZigpOwogICAgaW50IHR0OyBjaW4+PnR0OwogICAgd2hpbGUodHQtLSkKICAgIHsKICAgICAgICBjaW4+Pm0+Pm47CiAgICAgICAgZmYoaSwgMSwgbSkgY2luPj5hW2ldOwogICAgICAgIGZmKGksIDEsIG4pIGNpbj4+YltpXTsKCiAgICAgICAgY250LmNsZWFyKCk7IHZhLmNsZWFyKCk7IHZiLmNsZWFyKCk7CiAgICAgICAgZnJlcS5jbGVhcigpOyBmcmVxLnJlc2VydmUoMTAwMCk7CiAgICAgICAgZmYoaSAsMSwgbSkgKytmcmVxW2FbaV1dOwogICAgICAgIGZvcihhdXRvIHg6ZnJlcSkgdmEucGIoeCk7CiAgICAgICAgZnJlcS5jbGVhcigpOyBmcmVxLnJlc2VydmUoMTAwMCk7CiAgICAgICAgZmYoaSAsMSwgbikgKytmcmVxW2JbaV1dOwogICAgICAgIGZvcihhdXRvIHg6ZnJlcSkgdmIucGIoeCk7CiAgICAgICAgY250LnJlc2VydmUobSpuKTsKICAgICAgICBmb3IoYXV0byB4OnZhKSBmb3IoYXV0byB5OnZiKSBjbnRbY2FsKHguZmksIHkuZmkpIF0rPW1pbih4LnNlLCB5LnNlKTsKICAgICAgICBpbnQgYW5zPTA7CiAgICAgICAgZm9yKGF1dG8geDpjbnQpIG1heGkoYW5zLCB4LnNlKTsKICAgICAgICBjb3V0PDxtK24tYW5zPDxubDsKICAgIH0KICAgIHJlOwp9Cg==