#include <bits/stdc++.h>
using namespace std;
template <typename tp>
void read(tp& dig) {
  char ch = getchar();
  dig = 0;
  long long flag = 0;
  while (!isdigit(ch)) {
    if (ch == '-') flag = 1;
    ch = getchar();
  }
  while (isdigit(ch)) dig = dig * 10 + ch - '0', ch = getchar();
  if (flag) dig = -dig;
}
const int N = 300000;
int fac[300010], inv[300010], f[20][300010];
int n, ans, a[300010], num[300010];
inline int F(int x) { return x >= 998244353 ? x - 998244353 : x; }
inline int gcd(int a, int b) { return b ? gcd(b, a % b) : a; }
inline int ksm(int x, int t) {
  int res = 1;
  while (t) {
    if (t & 1) res = 1LL * res * x % 998244353;
    x = 1LL * x * x % 998244353;
    t >>= 1;
  }
  return res;
}
inline int C(int n, int m) {
  if (n < m) return 0;
  return 1LL * fac[n] * inv[m] % 998244353 * inv[n - m] % 998244353;
}
inline void work() {
  fac[0] = inv[0] = 1;
  for (int i = 1; i <= N; ++i) fac[i] = 1LL * fac[i - 1] * i % 998244353;
  inv[N] = ksm(fac[N], 998244353 - 2);
  for (int i = N - 1; i; --i) inv[i] = 1LL * inv[i + 1] * (i + 1) % 998244353;
  for (int i = 1; i < N; ++i)
    for (int j = i + i; j < N; j += i) num[i] += num[j];
  for (int i = 1;; ++i) {
    for (int j = N - 1; j; --j) {
      f[i][j] = C(num[j], i);
      for (int k = j + j; k < N; k += j)
        f[i][j] = F(f[i][j] - f[i][k] + 998244353);
    }
    if (f[i][1] > 0) {
      printf("%d\n", i);
      return;
    }
  }
}
int main() {
  read(n);
  for (int i = 1; i <= n; ++i) read(a[i]), ++num[a[i]];
  int d = a[1];
  for (int i = 2; i <= n; ++i) d = gcd(d, a[i]);
  if (d > 1) {
    printf("-1\n");
    return 0;
  }
  work();
  return 0;
}
