← Home
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)
		}
	}
}