package main
import (
"bufio"
"io"
"os"
)
func max(a, b int64) int64 {
if a > b {
return a
}
return b
}
func min(a, b int64) int64 {
if a < b {
return a
}
return b
}
type Scanner struct {
buf []byte
pos int
}
func NewScanner() *Scanner {
buf, _ := io.ReadAll(os.Stdin)
return &Scanner{buf: buf, pos: 0}
}
func (s *Scanner) nextInt() int {
for s.pos < len(s.buf) && s.buf[s.pos] <= ' ' {
s.pos++
}
if s.pos >= len(s.buf) {
return 0
}
res := 0
for s.pos < len(s.buf) && s.buf[s.pos] > ' ' {
res = res*10 + int(s.buf[s.pos]-'0')
s.pos++
}
return res
}
func (s *Scanner) nextInt64() int64 {
for s.pos < len(s.buf) && s.buf[s.pos] <= ' ' {
s.pos++
}
if s.pos >= len(s.buf) {
return 0
}
res := int64(0)
for s.pos < len(s.buf) && s.buf[s.pos] > ' ' {
res = res*10 + int64(s.buf[s.pos]-'0')
s.pos++
}
return res
}
func printInt(w *bufio.Writer, n int64) {
if n == 0 {
w.WriteByte('0')
w.WriteByte('\n')
return
}
if n < 0 {
w.WriteByte('-')
n = -n
}
var buf [20]byte
i := 19
for n > 0 {
buf[i] = byte(n%10 + '0')
n /= 10
i--
}
w.Write(buf[i+1:])
w.WriteByte('\n')
}
func main() {
scanner := NewScanner()
writer := bufio.NewWriter(os.Stdout)
defer writer.Flush()
n := scanner.nextInt()
if n == 0 {
return
}
q := scanner.nextInt()
a := make([]int64, n)
for i := 0; i < n; i++ {
a[i] = scanner.nextInt64()
}
b := make([]int64, n)
for i := 0; i < n; i++ {
b[i] = scanner.nextInt64()
}
pref := make([]int64, n+1)
for i := 1; i <= n; i++ {
pref[i] = pref[i-1] + a[i-1] - b[i-1]
}
log2 := make([]int, n+2)
log2[1] = 0
for i := 2; i <= n+1; i++ {
log2[i] = log2[i/2] + 1
}
K := log2[n] + 1
maxSt := make([][]int64, n+1)
minSt := make([][]int64, n+1)
for i := 1; i <= n; i++ {
maxSt[i] = make([]int64, K)
minSt[i] = make([]int64, K)
maxSt[i][0] = pref[i]
minSt[i][0] = pref[i]
}
for j := 1; j < K; j++ {
for i := 1; i+(1<<j)-1 <= n; i++ {
maxSt[i][j] = max(maxSt[i][j-1], maxSt[i+(1<<(j-1))][j-1])
minSt[i][j] = min(minSt[i][j-1], minSt[i+(1<<(j-1))][j-1])
}
}
for i := 0; i < q; i++ {
l := scanner.nextInt()
r := scanner.nextInt()
if pref[r] != pref[l-1] {
printInt(writer, -1)
continue
}
length := r - l + 1
k := log2[length]
maxVal := max(maxSt[l][k], maxSt[r-(1<<k)+1][k])
minVal := min(minSt[l][k], minSt[r-(1<<k)+1][k])
if maxVal > pref[l-1] {
printInt(writer, -1)
} else {
printInt(writer, pref[l-1]-minVal)
}
}
}