// #include<debugger.h>
 
#include<bits/stdc++.h>
using namespace std;
 
// #include<ext/pb_ds/assoc_container.hpp>
// using namespace __gnu_pbds;
 
#define int long long
// typedef long long ll;
// typedef tree< int, null_type, less_equal<int>, rb_tree_tag, tree_order_statistics_node_update > ordered_set;
 
#define endl '\n'
#define mem(a,b) memset(a, b, sizeof(a))
#define optimize() ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0);
#define fraction() cout.unsetf(ios::floatfield); cout.precision(10); cout.setf(ios::fixed,ios::floatfield);
#define file() freopen("input.txt","r",stdin);freopen("output.txt","w",stdout);
 
#define MOD 1000000007
const double PI = acos(-1);
const double eps = 1e-9;
 
const int MX = 2e5 + 10;
bitset<MX> isPrime;
vector<int> lowestPrime(MX, 0);
 
void sieve() 
{ 
    for (int i = 3; i < MX; i += 2) isPrime[i] = 1; 
 
    for (int i = 3; i < MX; i += 2) { 
        if (isPrime[i] == 1) {
            lowestPrime[i] = i;
            for (int j = i*i; j < MX; j += (i + i)) { 
                isPrime[j] = 0;
                if (lowestPrime[j] == 0)
                    lowestPrime[j] = i; 
            } 
        } 
    } 
 
    isPrime[2] = 1;
    for (int i = 2; i < MX; i += 2)
        lowestPrime[i] = 2;
} 
 
vector<int> factorization(int n) {
    vector<int> ret; 
 
    while (n > 1) { 
        int p = lowestPrime[n]; 
 
        if (n % p == 0)
            ret.push_back(p);
 
        while (n % p == 0) { 
            n /= p; 
        } 
    } 
 
    return ret; 
}
 
void solve(int ti)
{
    int n;
    cin >> n;
 
    vector<int> a(n), b(n);
    for (int &x : a)
        cin >> x;
 
    for (int &x : b)
        cin >> x;
 
    set<int> st;
    for (int i = 0; i < n; i++) {
        if (a[i] == 1) continue;
 
        vector<int> ret = factorization(a[i]);
        for (int x : ret) {
            if (!st.empty() and st.find(x) != st.end()) {
                cout << 0 << endl;
                return;
            }
            st.insert(x);
        }
    }
 
    for (int i = 0; i < n; i++) {
        vector<int> ret = factorization(a[i] + 1);
        for (int x : ret) {
            if (!st.empty() and st.find(x) != st.end()) {
                cout << 1 << endl;
                return;
            }
        }
    }
 
    cout << 2 << endl;
}
 
int tc = 1;
 
int32_t main()
{   
    sieve();
 
    optimize();
    // file(); 
    if(tc){int t;cin>>t;for(int i=1;i<=t;i++)solve(i);} 
    else solve(1);
    return 0;
}
				Ly8gI2luY2x1ZGU8ZGVidWdnZXIuaD4KIAojaW5jbHVkZTxiaXRzL3N0ZGMrKy5oPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwogCi8vICNpbmNsdWRlPGV4dC9wYl9kcy9hc3NvY19jb250YWluZXIuaHBwPgovLyB1c2luZyBuYW1lc3BhY2UgX19nbnVfcGJkczsKIAojZGVmaW5lIGludCBsb25nIGxvbmcKLy8gdHlwZWRlZiBsb25nIGxvbmcgbGw7Ci8vIHR5cGVkZWYgdHJlZTwgaW50LCBudWxsX3R5cGUsIGxlc3NfZXF1YWw8aW50PiwgcmJfdHJlZV90YWcsIHRyZWVfb3JkZXJfc3RhdGlzdGljc19ub2RlX3VwZGF0ZSA+IG9yZGVyZWRfc2V0OwogCiNkZWZpbmUgZW5kbCAnXG4nCiNkZWZpbmUgbWVtKGEsYikgbWVtc2V0KGEsIGIsIHNpemVvZihhKSkKI2RlZmluZSBvcHRpbWl6ZSgpIGlvc19iYXNlOjpzeW5jX3dpdGhfc3RkaW8oMCk7Y2luLnRpZSgwKTtjb3V0LnRpZSgwKTsKI2RlZmluZSBmcmFjdGlvbigpIGNvdXQudW5zZXRmKGlvczo6ZmxvYXRmaWVsZCk7IGNvdXQucHJlY2lzaW9uKDEwKTsgY291dC5zZXRmKGlvczo6Zml4ZWQsaW9zOjpmbG9hdGZpZWxkKTsKI2RlZmluZSBmaWxlKCkgZnJlb3BlbigiaW5wdXQudHh0IiwiciIsc3RkaW4pO2ZyZW9wZW4oIm91dHB1dC50eHQiLCJ3IixzdGRvdXQpOwogCiNkZWZpbmUgTU9EIDEwMDAwMDAwMDcKY29uc3QgZG91YmxlIFBJID0gYWNvcygtMSk7CmNvbnN0IGRvdWJsZSBlcHMgPSAxZS05OwoKY29uc3QgaW50IE1YID0gMmU1ICsgMTA7CmJpdHNldDxNWD4gaXNQcmltZTsKdmVjdG9yPGludD4gbG93ZXN0UHJpbWUoTVgsIDApOwogCnZvaWQgc2lldmUoKSAKeyAKICAgIGZvciAoaW50IGkgPSAzOyBpIDwgTVg7IGkgKz0gMikgaXNQcmltZVtpXSA9IDE7IAogCiAgICBmb3IgKGludCBpID0gMzsgaSA8IE1YOyBpICs9IDIpIHsgCiAgICAgICAgaWYgKGlzUHJpbWVbaV0gPT0gMSkgewogICAgICAgICAgICBsb3dlc3RQcmltZVtpXSA9IGk7CiAgICAgICAgICAgIGZvciAoaW50IGogPSBpKmk7IGogPCBNWDsgaiArPSAoaSArIGkpKSB7IAogICAgICAgICAgICAgICAgaXNQcmltZVtqXSA9IDA7CiAgICAgICAgICAgICAgICBpZiAobG93ZXN0UHJpbWVbal0gPT0gMCkKICAgICAgICAgICAgICAgICAgICBsb3dlc3RQcmltZVtqXSA9IGk7IAogICAgICAgICAgICB9IAogICAgICAgIH0gCiAgICB9IAogCiAgICBpc1ByaW1lWzJdID0gMTsKICAgIGZvciAoaW50IGkgPSAyOyBpIDwgTVg7IGkgKz0gMikKICAgICAgICBsb3dlc3RQcmltZVtpXSA9IDI7Cn0gCgp2ZWN0b3I8aW50PiBmYWN0b3JpemF0aW9uKGludCBuKSB7CiAgICB2ZWN0b3I8aW50PiByZXQ7IAoKICAgIHdoaWxlIChuID4gMSkgeyAKICAgICAgICBpbnQgcCA9IGxvd2VzdFByaW1lW25dOyAKICAgCiAgICAgICAgaWYgKG4gJSBwID09IDApCiAgICAgICAgICAgIHJldC5wdXNoX2JhY2socCk7CgogICAgICAgIHdoaWxlIChuICUgcCA9PSAwKSB7IAogICAgICAgICAgICBuIC89IHA7IAogICAgICAgIH0gCiAgICB9IAoKICAgIHJldHVybiByZXQ7IAp9Cgp2b2lkIHNvbHZlKGludCB0aSkKewogICAgaW50IG47CiAgICBjaW4gPj4gbjsKCiAgICB2ZWN0b3I8aW50PiBhKG4pLCBiKG4pOwogICAgZm9yIChpbnQgJnggOiBhKQogICAgICAgIGNpbiA+PiB4OwoKICAgIGZvciAoaW50ICZ4IDogYikKICAgICAgICBjaW4gPj4geDsKCiAgICBzZXQ8aW50PiBzdDsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbjsgaSsrKSB7CiAgICAgICAgaWYgKGFbaV0gPT0gMSkgY29udGludWU7CiAgICAgICAgCiAgICAgICAgdmVjdG9yPGludD4gcmV0ID0gZmFjdG9yaXphdGlvbihhW2ldKTsKICAgICAgICBmb3IgKGludCB4IDogcmV0KSB7CiAgICAgICAgICAgIGlmICghc3QuZW1wdHkoKSBhbmQgc3QuZmluZCh4KSAhPSBzdC5lbmQoKSkgewogICAgICAgICAgICAgICAgY291dCA8PCAwIDw8IGVuZGw7CiAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIH0KICAgICAgICAgICAgc3QuaW5zZXJ0KHgpOwogICAgICAgIH0KICAgIH0KCiAgICBmb3IgKGludCBpID0gMDsgaSA8IG47IGkrKykgewogICAgICAgIHZlY3RvcjxpbnQ+IHJldCA9IGZhY3Rvcml6YXRpb24oYVtpXSArIDEpOwogICAgICAgIGZvciAoaW50IHggOiByZXQpIHsKICAgICAgICAgICAgaWYgKCFzdC5lbXB0eSgpIGFuZCBzdC5maW5kKHgpICE9IHN0LmVuZCgpKSB7CiAgICAgICAgICAgICAgICBjb3V0IDw8IDEgPDwgZW5kbDsKICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICBjb3V0IDw8IDIgPDwgZW5kbDsKfQogICAgCmludCB0YyA9IDE7CiAKaW50MzJfdCBtYWluKCkKeyAgIAogICAgc2lldmUoKTsKICAgIAogICAgb3B0aW1pemUoKTsKICAgIC8vIGZpbGUoKTsgCiAgICBpZih0Yyl7aW50IHQ7Y2luPj50O2ZvcihpbnQgaT0xO2k8PXQ7aSsrKXNvbHZlKGkpO30gCiAgICBlbHNlIHNvbHZlKDEpOwogICAgcmV0dXJuIDA7Cn0=