#include <bits/stdc++.h>
using namespace std;
const int MAXN = 300007;
const long long MOD = 1e9 + 7;
int dp[8][MAXN];
long long cnt[MAXN];
long long fact[MAXN];
long long ext_gcd(long long a, long long b, long long &u, long long &v) {
  long long d = a;
  if (b != 0) {
    d = ext_gcd(b, a % b, v, u);
    v -= a / b * u;
    u %= MOD;
    v %= MOD;
  } else {
    u = 1;
    v = 0;
  }
  return d;
}
void init_fact() {
  fact[0] = 1;
  for (long long i = 1; i < MAXN; ++i) {
    fact[i] = (1ll * fact[i - 1] * i) % MOD;
  }
}
int mod_reverse(int a, long long m) {
  long long x, y;
  ext_gcd(a, m, x, y);
  return (1ll * m + x % m) % m;
}
int comb(int n, int k) {
  if (n < 0 || k < 0 || n < k) return 0;
  return 1ll * fact[n] * mod_reverse(1ll * fact[k] * fact[n - k] % MOD, MOD) %
         MOD;
}
void sub_mod(int &a, int b) {
  a -= b;
  if (a < 0) a += MOD;
}
long long gcd(long long a, long long b) {
  if (b == 0) return a;
  return gcd(b, a % b);
}
int main() {
  ios::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
  long long n;
  cin >> n;
  vector<long long> A(n, 0);
  long long g = 0;
  for (int i = 0; i < n; ++i) {
    cin >> A[i];
    ++cnt[A[i]];
    g = gcd(A[i], g);
  }
  if (cnt[1] != 0) {
    cout << 1 << endl;
    return 0;
  }
  if (g != 1) {
    cout << -1 << endl;
    return 0;
  }
  cnt[1] = n;
  for (long long i = 2; i < MAXN; ++i) {
    for (long long j = i * 2; j < MAXN; j += i) {
      cnt[i] += cnt[j];
    }
  }
  init_fact();
  for (long long i = 2; i < min(8ll, n + 1); ++i) {
    for (long long j = MAXN - 1; j > 0; --j) {
      dp[i][j] = comb(cnt[j], i);
      for (long long k = 2 * j; k < MAXN; k += j) {
        sub_mod(dp[i][j], dp[i][k]);
      }
    }
    if (dp[i][1] > 0) {
      cout << i << endl;
      return 0;
    }
  }
  assert(0);
}
