class
GFG
{
static
int
maxLen =
30
;
static
int
[]seg =
new
int
[
3
* maxLen];
static
int
build(
int
l,
int
r,
int
in,
int
[] arr)
{
if
(l == r)
return
seg[in] = arr[l];
int
mid = (l + r) /
2
;
return
seg[in] = __gcd(build(l, mid,
2
* in +
1
, arr),
build(mid +
1
, r,
2
* in +
2
, arr));
}
static
int
query(
int
l,
int
r,
int
l1,
int
r1,
int
in)
{
if
(l1 <= l && r <= r1)
return
seg[in];
if
(l > r1 || r < l1)
return
0
;
int
mid = (l + r) /
2
;
return
__gcd(query(l, mid, l1, r1,
2
* in +
1
),
query(mid +
1
, r, l1, r1,
2
* in +
2
));
}
static
int
findLen(
int
[]arr,
int
n)
{
build(
0
, n -
1
,
0
, arr);
int
i =
0
, j =
0
;
int
ans = Integer.MAX_VALUE;
while
(i < n)
{
while
(j < n && query(
0
, n -
1
,
i, j,
0
) !=
1
)
j++;
if
(j == n)
break
;
ans = Math.min((j - i +
1
), ans);
i++;
j = Math.max(j, i);
}
if
(ans == Integer.MAX_VALUE)
return
-
1
;
else
return
ans;
}
static
int
__gcd(
int
a,
int
b)
{
return
b ==
0
? a : __gcd(b, a % b);
}
public
static
void
main(String[] args)
{
int
arr[] = {
2
,
2
,
2
};
int
n = arr.length;
System.out.println(findLen(arr, n));
}
}