```go
package main
import (
"bufio"
"fmt"
"os"
)
func gcd(a, b int64) int64 {
for b != 0 {
a, b = b, a%b
}
if a < 0 {
return -a
}
return a
}
func exgcd(a, b int64) (int64, int64, int64) {
if b == 0 {
return a, 1, 0
}
d, x1, y1 := exgcd(b, a%b)
x := y1
y := x1 - (a/b)*y1
return d, x, y
}
func modInv(a, mod int64) int64 {
_, x, _ := exgcd(a, mod)
x %= mod
if x < 0 {
x += mod
}
return x
}
func main() {
in := bufio.NewReader(os.Stdin)
out := bufio.NewWriter(os.Stdout)
defer out.Flush()
var n, m int64
var k int
if _, err := fmt.Fscan(in, &n, &m, &k); err != nil {
return
}
M1 := 2 * n
M2 := 2 * m
g := gcd(M1, M2)
mod2 := M2 / g
l := M1 * mod2
gnm := gcd(n, m)
Lcorner := (n / gnm) * m
inv := modInv(M1/g, mod2)
for i := 0; i < k; i++ {
var x, y int64
fmt.Fscan(in, &x, &y)
ax := [2]int64{x, M1 - x}
by := [2]int64{y, M2 - y}
best := int64(-1)
for _, a := range ax {
for _, b := range by {
dd := b - a
if dd%g != 0 {
continue
}
ddg := dd / g
kmod := ddg % mod2
if kmod < 0 {
kmod += mod2
}
s := (kmod * (inv % mod2)) % mod2
T := a + M1*s
if T >= l {
T %= l
}
if T >= 0 && T < Lcorner {
if best == -1 || T < best {
best = T
}
}
}
}
fmt.Fprintln(out, best)
}
}
```