#include <bits/stdc++.h>
using namespace std;
int read() {
  char c = getchar();
  int d = 0, f = 1;
  for (; c < '0' || c > '9'; c = getchar())
    if (c == '-') f = -1;
  for (; c >= '0' && c <= '9'; d = d * 10 + c - 48, c = getchar())
    ;
  return d * f;
}
const int N = 300000;
const int mod = 998244353;
int mi(int a, int b) {
  int s = 1;
  for (; b; b >>= 1, a = (long long)a * a % mod)
    if (b & 1) s = (long long)s * a % mod;
  return s;
}
int n, mu[N + 1], a[N + 1], p[N + 1];
bool check[N + 1];
vector<int> e1[N + 1];
int e2[N + 1];
void init() {
  mu[1] = 1;
  for (int i = 2; i <= N; ++i) {
    if (!check[i]) p[++p[0]] = i, mu[i] = -1;
    for (int j = 1; j <= p[0]; ++j) {
      if (i * p[j] > N) break;
      check[i * p[j]] = 1;
      if (i % p[j] == 0) break;
      mu[i * p[j]] = -mu[i];
    }
  }
  for (int i = 1; i <= N; ++i)
    if (mu[i])
      for (int j = 1; j <= N / i; ++j) e1[j * i].push_back(i);
}
int ft[N + 1], Ft[N + 1], res[N + 1];
int C(int a, int b) {
  if (a < 0 || b < 0 || b > a) return 0;
  return (long long)ft[a] * Ft[b] % mod * Ft[a - b] % mod;
}
int main() {
  init();
  ft[0] = 1;
  for (int i = 1; i <= N; ++i) ft[i] = (long long)ft[i - 1] * i % mod;
  Ft[N] = mi(ft[N], mod - 2);
  for (int i = N; i >= 1; --i) Ft[i - 1] = (long long)Ft[i] * i % mod;
  n = read();
  for (int i = 1; i <= n; ++i) a[i] = read();
  for (int i = 1; i <= n; ++i)
    for (int j = 0; j <= ((int)e1[a[i]].size()) - 1; ++j) e2[e1[a[i]][j]]++;
  for (int i = 1; i <= N; ++i)
    if (mu[i]) {
      int L = e2[i];
      for (int j = 1; j <= L; ++j) (res[j] += mu[i] * C(L, j)) %= mod;
    }
  for (int i = 1; i <= n; ++i)
    if (res[i]) {
      printf("%d\n", i);
      return 0;
    }
  printf("-1\n");
}
