```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)
}
}
```