n=int(eval(input()))

A=list(map(int,input().split()))



#####単位元######

ide_ele = 0



#num:n以上の最小の2のべき乗

num=2**(n-1).bit_length()

seg=[ide_ele]*2*num



from fractions import gcd



def segfunc(x,y):

    return gcd(x,y) 



def init(init_val):

    #set_val

    for i in range(n):

        seg[i+num-1]=init_val[i]    

    #built

    for i in range(num-2,-1,-1) :

        seg[i]=segfunc(seg[2*i+1],seg[2*i+2]) 

    

def update(k,x):

    k += num-1

    seg[k] = x

    while k:

        k = (k-1)//2

        seg[k] = segfunc(seg[k*2+1],seg[k*2+2])

    

def query(p,q):

    if q<=p:

        return ide_ele

    p += num-1

    q += num-2

    res=ide_ele

    while q-p>1:

        if p&1 == 0:

            res = segfunc(res,seg[p])

        if q&1 == 1:

            res = segfunc(res,seg[q])

            q -= 1

        p = p//2

        q = (q-1)//2

    if p == q:

        res = segfunc(res,seg[p])

    else:

        res = segfunc(segfunc(res,seg[p]),seg[q])

    return res



init(A)

ans=-1

for i in range(n):

    ans=max(ans, gcd(query(0,i),query(i+1,n)))

print(ans)
n=int(eval(input()))

a=list(map(int,input().split()))

from fractions import gcd

L=[0]

R=[]

l=a[0]

r=a[-1]

for i in range(n-1):

    l=gcd(a[i], l)

    L.append(l)

    r=gcd(a[-i-1], r)

    R.append(r)

R=R[::-1]

R.append(0)

M=[]

#print(L,R)

for i in range(n):

    m=gcd(L[i],R[i])

    M.append(m)

print((max(M)))
n = int(eval(input()))
A = list(map(int, input().split()))
#####単位元######
ide_ele = 0
# num:n以上の最小の2のべき乗
num = 2 ** (n - 1).bit_length()
seg = [ide_ele] * 2 * num
from fractions import gcd


def segfunc(x, y):
    return gcd(x, y)


def init(init_val):
    # set_val
    for i in range(n):
        seg[i + num - 1] = init_val[i]
    # built
    for i in range(num - 2, -1, -1):
        seg[i] = segfunc(seg[2 * i + 1], seg[2 * i + 2])


def update(k, x):
    k += num - 1
    seg[k] = x
    while k:
        k = (k - 1) // 2
        seg[k] = segfunc(seg[k * 2 + 1], seg[k * 2 + 2])


def query(p, q):
    if q <= p:
        return ide_ele
    p += num - 1
    q += num - 2
    res = ide_ele
    while q - p > 1:
        if p & 1 == 0:
            res = segfunc(res, seg[p])
        if q & 1 == 1:
            res = segfunc(res, seg[q])
            q -= 1
        p = p // 2
        q = (q - 1) // 2
    if p == q:
        res = segfunc(res, seg[p])
    else:
        res = segfunc(segfunc(res, seg[p]), seg[q])
    return res


init(A)
ans = -1
for i in range(n):
    ans = max(ans, gcd(query(0, i), query(i + 1, n)))
print(ans)

n = int(eval(input()))
a = list(map(int, input().split()))
from fractions import gcd

L = [0]
R = []
l = a[0]
r = a[-1]
for i in range(n - 1):
    l = gcd(a[i], l)
    L.append(l)
    r = gcd(a[-i - 1], r)
    R.append(r)
R = R[::-1]
R.append(0)
M = []
# print(L,R)
for i in range(n):
    m = gcd(L[i], R[i])
    M.append(m)
print((max(M)))

-A = list(map(int, input().split())) -#####単位元###### -ide_ele = 0 -# num:n以上の最小の2のべき乗 -num = 2 ** (n - 1).bit_length() -seg = [ide_ele] * 2 * num +a = list(map(int, input().split())) - -def segfunc(x, y): -    return gcd(x, y) - - -def init(init_val): -    # set_val -    for i in range(n): -        seg[i + num - 1] = init_val[i] -    # built -    for i in range(num - 2, -1, -1): -        seg[i] = segfunc(seg[2 * i + 1], seg[2 * i + 2]) - - -def update(k, x): -    k += num - 1 -    seg[k] = x -    while k: -        k = (k - 1) // 2 -        seg[k] = segfunc(seg[k * 2 + 1], seg[k * 2 + 2]) - - -def query(p, q): -    if q <= p: -        return ide_ele -    p += num - 1 -    q += num - 2 -    res = ide_ele -    while q - p > 1: -        if p & 1 == 0: -            res = segfunc(res, seg[p]) -        if q & 1 == 1: -            res = segfunc(res, seg[q]) -            q -= 1 -        p = p // 2 -        q = (q - 1) // 2 -    if p == q: -        res = segfunc(res, seg[p]) -    else: -        res = segfunc(segfunc(res, seg[p]), seg[q]) -    return res - - -init(A) -ans = -1 +L = [0] +R = [] +l = a[0] +r = a[-1] +for i in range(n - 1): +    l = gcd(a[i], l) +    L.append(l) +    r = gcd(a[-i - 1], r) +    R.append(r) +R = R[::-1] +R.append(0) +M = [] +# print(L,R) -    ans = max(ans, gcd(query(0, i), query(i + 1, n))) -print(ans) +    m = gcd(L[i], R[i]) +    M.append(m) +print((max(M)))