package main
import (
"io"
"os"
"strconv"
)
func contrib(a []int64, i int) int64 {
if i <= 0 || i >= len(a) {
return 0
}
if i == 1 {
return a[1]
}
if a[i] > a[i-1] {
return a[i] - a[i-1]
}
return 0
}
func main() {
data, _ := io.ReadAll(os.Stdin)
p := 0
nextInt := func() int {
for p < len(data) && data[p] <= ' ' {
p++
}
x := 0
for p < len(data) && data[p] > ' ' {
x = x*10 + int(data[p]-'0')
p++
}
return x
}
t := nextInt()
out := make([]byte, 0, 1<<22)
for ; t > 0; t-- {
n := nextInt()
q := nextInt()
a := make([]int64, n+1)
for i := 1; i <= n; i++ {
a[i] = int64(nextInt())
}
var ans int64 = a[1]
for i := 2; i <= n; i++ {
if a[i] > a[i-1] {
ans += a[i] - a[i-1]
}
}
out = strconv.AppendInt(out, ans, 10)
for ; q > 0; q-- {
l := nextInt()
r := nextInt()
var pos [5]int
cnt := 0
add := func(x int) {
if x < 1 || x > n {
return
}
for i := 0; i < cnt; i++ {
if pos[i] == x {
return
}
}
pos[cnt] = x
cnt++
}
add(1)
add(l)
add(l + 1)
add(r)
add(r + 1)
for i := 0; i < cnt; i++ {
ans -= contrib(a, pos[i])
}
a[l], a[r] = a[r], a[l]
for i := 0; i < cnt; i++ {
ans += contrib(a, pos[i])
}
out = append(out, ' ')
out = strconv.AppendInt(out, ans, 10)
}
out = append(out, '\n')
}
os.Stdout.Write(out)
}