#include <bits/stdc++.h>
#define name "test"
#define FOR(i, a, b) for (int i = a; i <= b; ++i)
#define FORD(i, a, b) for (int i = a; i >= b; --i)
#define ll long long
#define fi first
#define se second
#define ii pair <int, int>
#define sz(a) a.size()
#define pb push_back
#define MASK(x) (1ll << x)
#define bit(x, i) ((x >> i) & 1)
#define pop_count(x) __builtin_popcount(x)
#define mingdu signed main()
using namespace std;
const ll mod = 1e9 + 7;
void add(ll& a, ll b) {
a += b;
if (a >= mod) a -= mod;
if (a < 0) a += mod;
}
template<class X, class Y> void mx(X &x, const Y y) {if (y > x) x = y;}
template<class X, class Y> void mn(X &x, const Y y) {if (y < x) x = y;}
const int N = 1e6 + 5;
int a[N], b[N], n, m;
void nhap() {
cin >> n >> m;
FOR(i, 1, n) cin >> a[i];
FOR(i, 1, m) cin >> b[i];
}
void giai() {
map <int, int> mpA, mpB;
map <pair<int, int>, int> cnt;
int Max = 0;
FOR(i, 1, n) ++mpA[a[i]];
FOR(i, 1, m) ++mpB[b[i]];
for (auto [x1, v1] : mpA) for (auto [x2, v2] : mpB) {
int g = __gcd(x1, x2);
int tu = x1 / g;
int mau = x2 / g;
Max = max(Max, cnt[{tu, mau}] += min(v1, v2));
}
cout << n + m - Max << '\n';
}
mingdu {
ios_base::sync_with_stdio(0);
cin.tie(0); cout.tie(0);
if (fopen(name".inp", "r")) {
freopen(name".inp", "r", stdin);
freopen(name".out", "w", stdout);
}
int t; cin >> t;
while (t--) {
nhap();
giai();
}
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CgojZGVmaW5lIG5hbWUgInRlc3QiCiNkZWZpbmUgRk9SKGksIGEsIGIpIGZvciAoaW50IGkgPSBhOyBpIDw9IGI7ICsraSkKI2RlZmluZSBGT1JEKGksIGEsIGIpIGZvciAoaW50IGkgPSBhOyBpID49IGI7IC0taSkKI2RlZmluZSBsbCBsb25nIGxvbmcKI2RlZmluZSBmaSBmaXJzdAojZGVmaW5lIHNlIHNlY29uZAojZGVmaW5lIGlpIHBhaXIgPGludCwgaW50PgojZGVmaW5lIHN6KGEpIGEuc2l6ZSgpCiNkZWZpbmUgcGIgcHVzaF9iYWNrCiNkZWZpbmUgTUFTSyh4KSAoMWxsIDw8IHgpCiNkZWZpbmUgYml0KHgsIGkpICgoeCA+PiBpKSAmIDEpCiNkZWZpbmUgcG9wX2NvdW50KHgpIF9fYnVpbHRpbl9wb3Bjb3VudCh4KQojZGVmaW5lIG1pbmdkdSBzaWduZWQgbWFpbigpCgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKY29uc3QgbGwgbW9kID0gMWU5ICsgNzsKCnZvaWQgYWRkKGxsJiBhLCBsbCBiKSB7CiAgICBhICs9IGI7CiAgICBpZiAoYSA+PSBtb2QpIGEgLT0gbW9kOwogICAgaWYgKGEgPCAwKSBhICs9IG1vZDsKfQoKdGVtcGxhdGU8Y2xhc3MgWCwgY2xhc3MgWT4gdm9pZCBteChYICZ4LCBjb25zdCBZIHkpIHtpZiAoeSA+IHgpIHggPSB5O30KdGVtcGxhdGU8Y2xhc3MgWCwgY2xhc3MgWT4gdm9pZCBtbihYICZ4LCBjb25zdCBZIHkpIHtpZiAoeSA8IHgpIHggPSB5O30KCmNvbnN0IGludCBOID0gMWU2ICsgNTsKaW50IGFbTl0sIGJbTl0sIG4sIG07Cgp2b2lkIG5oYXAoKSB7CiAgICBjaW4gPj4gbiA+PiBtOwogICAgRk9SKGksIDEsIG4pIGNpbiA+PiBhW2ldOwogICAgRk9SKGksIDEsIG0pIGNpbiA+PiBiW2ldOwp9Cgp2b2lkIGdpYWkoKSB7CiAgICBtYXAgPGludCwgaW50PiBtcEEsIG1wQjsKICAgIG1hcCA8cGFpcjxpbnQsIGludD4sIGludD4gY250OwogICAgaW50IE1heCA9IDA7CiAgICBGT1IoaSwgMSwgbikgKyttcEFbYVtpXV07CiAgICBGT1IoaSwgMSwgbSkgKyttcEJbYltpXV07CgogICAgZm9yIChhdXRvIFt4MSwgdjFdIDogbXBBKSBmb3IgKGF1dG8gW3gyLCB2Ml0gOiBtcEIpIHsKICAgICAgICBpbnQgZyA9IF9fZ2NkKHgxLCB4Mik7CiAgICAgICAgaW50IHR1ID0geDEgLyBnOwogICAgICAgIGludCBtYXUgPSB4MiAvIGc7CiAgICAgICAgTWF4ID0gbWF4KE1heCwgY250W3t0dSwgbWF1fV0gKz0gbWluKHYxLCB2MikpOwogICAgfQoKICAgIGNvdXQgPDwgbiArIG0gLSBNYXggPDwgJ1xuJzsKfQoKbWluZ2R1IHsKICAgIGlvc19iYXNlOjpzeW5jX3dpdGhfc3RkaW8oMCk7CiAgICBjaW4udGllKDApOyBjb3V0LnRpZSgwKTsKCiAgICBpZiAoZm9wZW4obmFtZSIuaW5wIiwgInIiKSkgewogICAgICAgIGZyZW9wZW4obmFtZSIuaW5wIiwgInIiLCBzdGRpbik7CiAgICAgICAgZnJlb3BlbihuYW1lIi5vdXQiLCAidyIsIHN0ZG91dCk7CiAgICB9CgogICAgaW50IHQ7IGNpbiA+PiB0OwogICAgd2hpbGUgKHQtLSkgewogICAgICAgIG5oYXAoKTsKICAgICAgICBnaWFpKCk7CiAgICB9CgogICAgcmV0dXJuIDA7Cn0K