/*
这道题的操作其实就是求两个数的 gcd并替换其中一个数。
我们知道如果要使整个数列全部变为 1 的话,那么我们在进行若干次(小于 n 次)操作后,
必定会出现 1。那么我们用这个1去和其它不是 1 的数求 gcd就能将整个序列变成 1
*/
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N=1e7+100;
int n,a[N],res;
signed main(){
cin>>n;
for (int i=1;i<=n;i++){
cin>>a[i];
res+=(a[i]==1?1:0);
}
if (res){
cout<<n-res;
return 0;
}
int step=1e9;
for (int i=1;i<n;i++){
int x=a[i];
for (int j=i+1;j<=n;j++){
x=__gcd(x,a[j]);//暴力会超时,用gcd的自带函数优化
if(j-i>step) break;
if(x==1){
step=j-i;
break;
}
}
}
if (step==1e9) cout<<-1;
else cout<<n-1+step;
return 0;
}