using s64 = longlong; using u64 = unsignedlonglong;
/* 取 min */ template <classT> inlinevoidchmin(T &x, const T &y){ if (x > y) { x = y; } } /* 取 max */ template <classT> inlinevoidchmax(T &x, const T &y){ if (x < y) { x = y; } }
/* ----- ----- ----- 正文 ----- ----- ----- */
constint V = 1e6; constint MaxV = V + 10;
int primeCount, prime[MaxV], fac[MaxV], miu[MaxV]; std::vector<int> factor[MaxV]; voidsieve(constint &n){ miu[1] = 1; for (int i = 2; i <= n; i ++) { if (!fac[i]) { prime[++ primeCount] = i, fac[i] = i, miu[i] = -1; } for (int j = 1; j <= primeCount; j ++) { if (prime[j] > fac[i] || prime[j] > n / i) break; fac[i * prime[j]] = prime[j]; miu[i * prime[j]] = miu[i] * (i % prime[j] ? -1 : 0); } }
for (int i = 1; i <= n; i ++) { for (int j = i; j <= n; j += i) { factor[j].push_back(i); } } }
constint N = 200100, M = 1000100;
int n, m; int a[N], vis[N];
int sum[M];
std::pair<int, int> find(){ for (int i = 1; i <= m; i ++) { sum[i] = 0; } for (int i = 1; i <= n; i ++) { if (vis[i]) { continue; } int b = 0; for (int d : factor[a[i]]) { b += miu[d] * sum[d], sum[d] ++; } if (b) { for (int j = 1; j < i; j ++) { if (vis[j]) { continue; } if (std::gcd(a[j], a[i]) == 1) { vis[j] = vis[i] = 1; return {j, i}; } } } }
return {-1, -1}; }
voidwork(){ std::cin >> n >> m;
for (int i = 1; i <= n; i ++) { std::cin >> a[i], vis[i] = 0; }
auto [p1, q1] = find(); if (p1 == -1) { std::cout << 0 << '\n'; return; }