← Home
```go
package main

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

func gcd(a, b int) int {
	for b != 0 {
		a, b = b, a%b
	}
	return a
}

func main() {
	in := bufio.NewReader(os.Stdin)
	out := bufio.NewWriter(os.Stdout)
	defer out.Flush()

	var a, b int
	fmt.Fscan(in, &a, &b)

	g := gcd(a, b)
	divs := make([]int, 0)
	for i := 1; i*i <= g; i++ {
		if g%i == 0 {
			divs = append(divs, i)
			if i*i != g {
				divs = append(divs, g/i)
			}
		}
	}
	sort.Ints(divs)

	var n int
	fmt.Fscan(in, &n)

	for i := 0; i < n; i++ {
		var low, high int
		fmt.Fscan(in, &low, &high)

		idx := sort.Search(len(divs), func(j int) bool {
			return divs[j] > high
		})

		ans := -1
		if idx > 0 {
			if divs[idx-1] >= low {
				ans = divs[idx-1]
			}
		}
		fmt.Fprintln(out, ans)
	}
}
```