传送阵
题号:NC252726
时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 256 M,其他语言512 M
64bit IO Format: %lld

题目描述

牛牛在玩一款游戏,这款游戏的地图可以被看作是一个 nm 列的方格图,每个格子上都有一个数字,第 i 行第 j 列的格子上的数字为 Col_{i,j}

当牛牛处于某个格子上时,他会把所有和当前格子上数字相等的格子(包含当前格子)都标记。

牛牛可以朝上下左右任意一个方向走一步,花费的代价是 1。

牛牛可以从当前位置传送到任意一个已经被标记了的格子上,花费的代价是 0。

游戏开始时牛牛可以选择方格上任何一个格子作为起点(这一步的代价也是 1),他想知道若到每个格子至少一次他需要花费的最少代价是多少。

输入描述:

本题采用多组案例输入,第一行一个整数 T 代表案例组数。

每组案例第一行输入两个空格分隔的整数:n\ m

接下来 n 行,每行 m 个空格分隔的整数代表 Col_{i,j}

保证: 
1 \leq n,m \le 10^3 
1 \leq n\times m\le 10^5 
1 \leq Col_{i,j}\le n\times m 
单个测试点中所有案例 n\times m 的和不超过 2\times10^5

输出描述:

对于每组案例,输出一行一个整数代表牛牛所需要花费的最少代价。
示例1

输入

复制
3
2 1
2
2
1 1
1
2 3
1 2 3
2 3 4

输出

复制
1
1
4