← Home
package main

import (
	"bufio"
	"fmt"
	"os"
)

const MAX = 400010

var is_prime [MAX]bool

func main() {
	for i := 2; i < MAX; i++ {
		is_prime[i] = true
	}
	for i := 2; i*i < MAX; i++ {
		if is_prime[i] {
			for j := i * i; j < MAX; j += i {
				is_prime[j] = false
			}
		}
	}
	in := bufio.NewReader(os.Stdin)
	var t int
	fmt.Fscan(in, &t)
	for i := 0; i < t; i++ {
		_ = i
		var n int
		fmt.Fscan(in, &n)
		a := make([]int, n)
		for i := 0; i < n; i++ {
			fmt.Fscan(in, &a[i])
		}
		var odds []int
		for _, ai := range a {
			if ai%2 == 1 && is_prime[ai] {
				odds = append(odds, ai)
			}
		}
		nodds := len(odds)
		if nodds > 1 {
			fmt.Println(-1)
			continue
		}
		if nodds == 0 {
			fmt.Println(2)
			continue
		}
		p := odds[0]
		ok := true
		for _, y := range a {
			if !canGenerate(p, y) {
				ok = false
				break
			}
		}
		if ok {
			fmt.Println(p)
		} else {
			fmt.Println(-1)
		}
	}
}

func canGenerate(p int, y int) bool {
	if y == p {
		return true
	}
	tp := 2 * p
	if y < tp {
		return false
	}
	if y%2 == 0 {
		return true
	}
	maxd := y - tp
	if maxd < 3 {
		return false
	}
	divs := []int{}
	for i := 1; i*i <= y; i++ {
		if y%i == 0 {
			divs = append(divs, i)
			if i != y/i {
				divs = append(divs, y/i)
			}
		}
	}
	for _, d := range divs {
		if d >= 3 && d <= maxd {
			return true
		}
	}
	return false
}