#include <bits/stdc++.h>
using namespace std;
const int N = 3e5 + 5;
const int lucky = 7;
const long long MOD = 1e9 + 9;
vector<int> divi[N];
long long cnt[N];
long long dp[N];
long long fact[N];
long long inv[N];
long long bigMod(long long b, long long p) {
  if (p == 0) return 1;
  long long t = bigMod(b, p / 2);
  t = (t * t) % MOD;
  if (p & 1) return (t * b) % MOD;
  return t;
}
void init() {
  for (int i = 1; i < N; i++) {
    for (int j = i; j < N; j += i) {
      divi[j].push_back(i);
    }
  }
  fact[0] = 1;
  inv[0] = 1;
  for (int i = 1; i < N; i++) {
    fact[i] = (fact[i - 1] * i) % MOD;
    inv[i] = bigMod(fact[i], MOD - 2);
  }
}
long long C(long long n, long long r) {
  if (r > n) return 0;
  return (((fact[n] * inv[r]) % MOD) * (inv[n - r])) % MOD;
}
bool found(int k) {
  fill(dp, dp + N, 0);
  for (int i = N - 1; i >= 1; i--) {
    dp[i] = C(cnt[i], k);
    for (int j = i + i; j < N; j += i) {
      dp[i] -= dp[j];
      dp[i] %= MOD;
    }
  }
  return dp[1] != 0;
}
int main() {
  init();
  int n;
  cin >> n;
  for (int i = 1; i <= n; i++) {
    int x;
    scanf("%d", &x);
    for (int d : divi[x]) cnt[d]++;
  }
  for (int k = 1; k <= lucky; k++) {
    if (found(k)) {
      cout << k;
      return 0;
    }
  }
  cout << -1;
}
