PROGRAM ATCODER

implicit none
integer :: n,i,r1,r2,b1,b2,c1,c2
integer,allocatable :: a(:),a_l(:),a_r(:),ans(:)

read*, n
allocate(a(n),a_l(n),a_r(n),ans(n))
read*, a(1:n)

a_l(1) = a(1)
a_r(1) = a(n)

do i = 2, n
  b1 = a(i)
  c1 = a_l(i-1)
  b2 = a(n+1-i)
  c2 = a_r(i-1)
  do
    r1 = mod(c1,b1)
    if ( r1 == 0 ) exit
    c1 = b1
    b1 = r1
  end do
  do
    r2 = mod(c2,b2)
    if ( r2 == 0 ) exit
    c2 = b2
    b2 = r2
  end do
  a_l(i) = b1
  a_r(i) = b2
end do

ans(1) = a_r(n-1)
ans(n) = a_l(n-1)

do i = 2, n-1
  c1 = a_l(i-1)
  b1 = a_r(n-i)
  do
    r1 = mod(c1,b1)
    if ( r1 == 0 ) exit
    c1 = b1
    b1 = r1
  end do
  ans(i) = b1
end do

print'(i0)', maxval(ans)

END PROGRAM ATCODER