# Author: Christian Yongwhan Lim
# Date: July 13, 2025

from collections import deque

# Direction vectors: up, down, left, right
dx = [-1, 1, 0, 0]
dy = [0, 0, -1, 1]


def bfs(x, y, grid, visited, n, m):
    q = deque()
    q.append((x, y))
    visited[x][y] = True
    volume = 4 - grid[x][y]

    while q:
        cx, cy = q.popleft()
        for dir in range(4):
            nx = cx + dx[dir]
            ny = cy + dy[dir]
            if 0 <= nx < n and 0 <= ny < m:
                if not visited[nx][ny] and grid[nx][ny] < 4:
                    visited[nx][ny] = True
                    volume += 4 - grid[nx][ny]
                    q.append((nx, ny))

    return volume


def main():
    import sys

    input = sys.stdin.read
    data = input().split()

    idx = 0
    t = int(data[idx])
    idx += 1

    results = []

    for _ in range(t):
        n = int(data[idx])
        m = int(data[idx + 1])
        idx += 2

        grid = []
        for i in range(n):
            row = list(map(int, data[idx : idx + m]))
            grid.append(row)
            idx += m

        visited = [[False] * m for _ in range(n)]
        max_volume = 0

        for i in range(n):
            for j in range(m):
                if not visited[i][j] and grid[i][j] < 4:
                    max_volume = max(max_volume, bfs(i, j, grid, visited, n, m))

        results.append(str(max_volume))

    print("\n".join(results))


if __name__ == "__main__":
    main()
