package main
import (
"io"
"os"
"strconv"
)
const INF = int(1e9)
func check(a, pref []int, n, x, y int) bool {
cur := 0
pref[0] = 0
min0, min1 := INF, INF
nextAdd := 0
for i := 1; i <= n; i++ {
ai := a[i]
if ai < x {
pref[i] = cur
min0, min1 = INF, INF
nextAdd = i
continue
}
if ai >= y {
cur++
} else {
cur--
}
pref[i] = cur
if ai == x {
for j := nextAdd; j < i; j++ {
pj := pref[j]
if j&1 == 0 {
if pj < min0 {
min0 = pj
}
} else {
if pj < min1 {
min1 = pj
}
}
}
nextAdd = i
}
if i&1 == 0 {
if min0 <= cur || min1 <= cur-1 {
return true
}
} else {
if min1 <= cur || min0 <= cur-1 {
return true
}
}
}
return false
}
func main() {
data, _ := io.ReadAll(os.Stdin)
idx := 0
nextInt := func() int {
for idx < len(data) && (data[idx] < '0' || data[idx] > '9') {
idx++
}
val := 0
for idx < len(data) && data[idx] >= '0' && data[idx] <= '9' {
val = val*10 + int(data[idx]-'0')
idx++
}
return val
}
t := nextInt()
out := make([]byte, 0, t*4)
var a, pref []int
for ; t > 0; t-- {
n := nextInt()
if cap(a) < n+1 {
a = make([]int, n+1)
pref = make([]int, n+1)
} else {
a = a[:n+1]
pref = pref[:n+1]
}
var cnt [101]int
maxVal := 0
for i := 1; i <= n; i++ {
v := nextInt()
a[i] = v
cnt[v]++
if v > maxVal {
maxVal = v
}
}
ans := 0
for x := 1; x < maxVal; x++ {
if cnt[x] == 0 {
continue
}
lo, hi := x, maxVal+1
for lo+1 < hi {
mid := (lo + hi) >> 1
if check(a, pref, n, x, mid) {
lo = mid
} else {
hi = mid
}
}
if lo-x > ans {
ans = lo - x
}
}
out = strconv.AppendInt(out, int64(ans), 10)
out = append(out, '\n')
}
os.Stdout.Write(out)
}