package main
import (
"io"
"os"
"strconv"
)
func main() {
data, _ := io.ReadAll(os.Stdin)
p := 0
nextInt := func() int {
for p < len(data) && (data[p] < '0' || data[p] > '9') {
p++
}
x := 0
for p < len(data) && data[p] >= '0' && data[p] <= '9' {
x = x*10 + int(data[p]-'0')
p++
}
return x
}
t := nextInt()
out := make([]byte, 0, t*12)
for ; t > 0; t-- {
n := nextInt()
m := nextInt()
total := n * m
grid := make([]int, total)
for i := 0; i < total; i++ {
grid[i] = nextInt()
}
stack := make([]int, 0, total)
var best int64
for i := 0; i < total; i++ {
if grid[i] == 0 {
continue
}
var sum int64
stack = append(stack[:0], i)
sum += int64(grid[i])
grid[i] = 0
for len(stack) > 0 {
v := stack[len(stack)-1]
stack = stack[:len(stack)-1]
if u := v - m; v >= m && grid[u] > 0 {
sum += int64(grid[u])
grid[u] = 0
stack = append(stack, u)
}
if u := v + m; u < total && grid[u] > 0 {
sum += int64(grid[u])
grid[u] = 0
stack = append(stack, u)
}
c := v % m
if c > 0 {
u := v - 1
if grid[u] > 0 {
sum += int64(grid[u])
grid[u] = 0
stack = append(stack, u)
}
}
if c+1 < m {
u := v + 1
if grid[u] > 0 {
sum += int64(grid[u])
grid[u] = 0
stack = append(stack, u)
}
}
}
if sum > best {
best = sum
}
}
out = strconv.AppendInt(out, best, 10)
out = append(out, '\n')
}
_, _ = os.Stdout.Write(out)
}