Problem:
Score : 300 points

Problem Statement

There are N integers, A_1, A_2, ..., A_N, written on the blackboard.

You will choose one of them and replace it with an integer of your choice between 1 and 10^9 (inclusive), possibly the same as the integer originally written.

Find the maximum possible greatest common divisor of the N integers on the blackboard after your move.

Constraints

All values in input are integers.

2 \leq N \leq 10^5

1 \leq A_i \leq 10^9

Output

Input is given from Standard Input in the following format:

N
A_1 A_2 ... A_N

Output

Print the maximum possible greatest common divisor of the N integers on the blackboard after your move.

Sample Input 1

3
7 6 8

Sample Output 1

2

If we replace 7 with 4, the greatest common divisor of the three integers on the blackboard will be 2, which is the maximum possible value.

Sample Input 2

3
12 15 18

Sample Output 2

6

Sample Input 3

2
1000000000 1000000000

Sample Output 3

1000000000

We can replace an integer with itself.

Solution in Fortran (gfortran v4.8.4) (judge verdict: Runtime Error)

program main
Implicit None
	integer(8)::n,p1,p2,p3,x,y,m
	integer(8),allocatable::a(:)
	
	read*,n
	allocate(a(n))
	
	read*,a
	
	if(n == 2)then
		print"(i0)",max(a(1),a(2))
		stop
	endif
	
	call h1(a,n)
	
	call euc(a(1),a(2),p1)
	call euc(a(1),a(3),p2)
	call euc(a(3),a(2),p3)
	
	if(p1 == 1 .and. p2 == 1 .and. p3 == 1)then
		print"(i0)",1
		stop
	endif
	
	x = 1 ;y = 2
	call ec(a,n,x,y,p1)
	y = 3
	call ec(a,n,x,y,p2)
	x = 2
	call ec(a,n,x,y,p3)
	
	print"(i0)",max(p1,p2,p3)
end program main

recursive subroutine ec(a,n,p,q,c)
Implicit None
	integer(8)::a(n),n,p,q,c,i,k,t
	
	k = 0
	call euc(a(p),a(q),c)
	if(c ==1) return
	do i = 1,n
		if(mod(a(i),c) /= 0)then
			if(k == 0) t = i
			k = k+1
			if(k > 1)then
				call ec(a,n,p,t,c)
				return
			endif
		endif
	enddo
end subroutine ec

subroutine euc(a1,b1,c)
implicit None
integer(8)::a1,b1,c,a,b
	a = a1
	b = b1
	c = 1
	
	do while (a /=0 .and. b /= 0)
		if (a > b)then
			c = b
			a = mod(a,b)
			else
			c = a
			b = mod(b,a)
		endif
	enddo
end subroutine euc

subroutine h1(a,n)
implicit None
	integer(8)::a(n),x
	integer(8)::n,i,ie,i0,i1,i2
	
	do i = n/2,1,-1
		x = a(i);ie = n + 1; i0 = i; i1 = i0 * 2
		do while(i1 < ie)
			i2 = i1 + 1
			if(i2 < ie .and. a(i1) < a(i2)) i1 = i2
			if(a(i1) > x)then
				a(i0) = a(i1);a(i1) = x
				else
				exit
			endif
			i0 = i1;i1 = i0 *2
		enddo
	enddo
	do ie = n,2,-1
		x = a(ie)
		a(ie) = a(1)
		a(1) = x
		i0 =1;i1 =2
		do while(i1 <ie)
			i2 = i1 +1
			if(i2 < ie .and. a(i1) < a(i2)) i1 = i2
			if(a(i1) > x)then
				a(i0) = a(i1);a(i1) = x
				else
				exit
			endif
			i0 = i1;i1 = i0 *2
		enddo
	enddo
end subroutine h1