#include <bits/stdc++.h>
using namespace std;
int Read() {
  int x = 0;
  char c = getchar();
  bool neg = false;
  while (c != '-' && (c < '0' && c > '9')) c = getchar();
  if (c == '-') neg = true, c = getchar();
  while (c >= '0' && c <= '9') x = x * 10 + c - '0', c = getchar();
  if (neg) x = -x;
  return x;
}
void Write(int x) {
  if (x < 0) {
    putchar('-');
    Write(-x);
    return;
  };
  if (x > 9) Write(x / 10);
  putchar(x % 10 + '0');
}
const int maxn = 3e5 + 1;
const int MOD = 1e6 + 3;
int n, cnt[maxn];
int f[maxn], g[maxn];
int dp[maxn];
int Pw(int a, int b) {
  int res = 1;
  for (; b; b >>= 1) {
    if (b & 1) res = (1LL * res * a) % MOD;
    a = (1LL * a * a) % MOD;
  }
  return res;
}
int C(int k, int n) {
  if (k > n) return 0;
  return ((1LL * f[n] * g[k]) % MOD) * g[n - k] % MOD;
}
int main() {
  n = Read();
  int N = 0;
  for (int i = 1, _b = n; i <= _b; ++i) {
    int x = Read();
    if (x > N) N = x;
    cnt[x]++;
  }
  for (int i = 1, _b = N; i <= _b; ++i)
    for (int j = i + i; j <= N; j += i) cnt[i] += cnt[j];
  f[0] = 1;
  for (int i = 1, _b = n; i <= _b; ++i) f[i] = (1LL * f[i - 1] * i) % MOD;
  g[n] = Pw(f[n], MOD - 2);
  for (int i = n, _b = 1; i >= _b; --i) g[i - 1] = (1LL * g[i] * i) % MOD;
  for (int i = 1, _b = 7; i <= _b; ++i) {
    for (int j = N, _b = 1; j >= _b; --j) {
      dp[j] = C(i, cnt[j]);
      for (int k = j + j; k <= N; k += j) {
        dp[j] -= dp[k];
        if (dp[j] < 0) dp[j] += MOD;
      }
    }
    if (dp[1] > 0) {
      Write(i);
      return 0;
    }
  }
  Write(-1);
}
