5
5 5
0 1 0 0 0
0 0 0 0 0
0 2 0 9 0
0 0 0 0 0
0 9 -1 0 -2
4 6
-1 -2 1 0 9 0
0 2 0 0 0 0
0 0 0 0 0 0
0 0 0 0 0 0
7 4
0 0 0 0
0 0 0 9
2 0 1 0
0 0 9 0
0 9 0 0
0 0 0 0
-1 0 -2 0
4 7
0 0 0 0 0 0 0
0 0 1 9 0 0 0
0 0 0 0 0 0 0
9 2 -1 9 0 0 -2
10 10
0 0 0 0 0 0 0 9 -1 0
0 9 -2 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 9
0 0 0 9 0 0 0 0 0 0
1 0 0 0 0 0 0 0 0 0
0 0 0 9 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 2 0 0 0 0 9 9
9 0 0 0 0 0 9 0 0 0
#include<stdio.h>
#include<stdlib.h>
int row,col;
int data[12][12] = {0};
int Dx[4] = {1,-1,0,0};//下,上,左,右
int Dy[4] = {0,0,-1,1};
int sox,soy;
int stx,sty;
int eox,eoy;
int etx,ety;
int min = 8;
bool ret = false;
void DFS(int ox,int oy,int tx,int ty,int step,int I);
int main()
{
	for(int i = 0;i < 12;i++)
	{
		for(int j = 0;j < 12;j++)
		{
			data[i][j] = 9;
		}
	}
	int n;
	freopen("qipanhuakuai.txt","r",stdin);
	scanf("%d",&n);
	for(int t = 0;t < n;t++)
	{
		scanf("%d",&row);
		scanf("%d",&col);
		for(int i = 1;i <= row;i++)
		{
			for(int j = 1;j <= col;j++)
			{
				scanf("%d",&data[i][j]);
				if(data[i][j] == 1){
					sox = i;
					soy = j;
				}else if(data[i][j] == 2){
					stx = i;
					sty = j;
				}else if(data[i][j] == -1){
					data[i][j] = 0;
					eox = i;
					eoy = j;
				}
				else if(data[i][j] == -2){
					data[i][j] = 0;
					etx = i;
					ety = j;
				}
			}
		}
		DFS(sox,soy,stx,sty,0,-1);
		if(ret)
		{
			printf("%d\n",min);
		}else{
			printf("%d\n",-1);
		}
		ret = false;
		min = 8;
		for(int i = 1;i <= row;i++)
		{
			for(int j = 1;j <= col;j++)
			{
				data[i][j] = 9;
			}
		}
	}
	return 0;
}
void DFS(int ox,int oy,int tx,int ty,int step,int I)
{
	if(ox == eox && oy == eoy && tx == etx && ty == ety)
	{
		//printf("%d\t",step);
		ret = true;
		if(step < min)
		{
			min = step;
		}
		return;
	}
	if(step >= 8)
	{
		return;
	}
	int lx = ox,ly = oy,rx = tx,ry = ty;
	data[lx][ly] = 0;
	data[rx][ry] = 0;
	for(int i = 0;i < 4;i++)
	{
		if(i == I)
		{
			continue;
		}
		if(i == 0){
			if(lx > rx){
				while(1){
					if(data[lx + Dx[i]][ly] != 9)
					{
						data[lx][ly] = 0;
						lx += Dx[i];
						
					}
					else{
						data[lx][ly] = 1;
						break;
					}
				}
				while(1){
					if(data[rx + Dx[i]][ry] != 9 && data[rx + Dx[i]][ry] != 1)
					{
						data[rx][ry] = 0;
						rx += Dx[i];
						
					}
					else{
						data[rx][ry] = 2;
						break;
					}
				}
			}
			else if(lx <= rx){
				while(1){
					if(data[rx + Dx[i]][ry] != 9)
					{
						data[rx][ry] = 0;
						rx += Dx[i];
						
					}
					else{
						data[rx][ry] = 2;
						break;
					}
				}
				while(1){
					if(data[lx + Dx[i]][ly] != 9 && data[lx + Dx[i]][ly] != 2)
					{
						data[lx][ly] = 0;
						lx += Dx[i];
						
					}
					else{
						data[lx][ly] = 1;
						break;
					}
				}
			}
			DFS(lx,ly,rx,ry,step + 1,i);
			data[lx][ly] = 0;
			data[rx][ry] = 0;
			lx = ox;
			ly = oy;
			rx = tx;
			ry = ty;
			data[lx][ly] = 1;
			data[rx][ry] = 2;
		}
		else if(i == 1){
			if(lx > rx){
				while(1){
					if(data[rx + Dx[i]][ry] != 9)
					{
						data[rx][ry] = 0;
						rx += Dx[i];
						
					}
					else{
						data[rx][ry] = 2;
						break;
					}
				}
				while(1){
					if(data[lx + Dx[i]][ly] != 9 && data[lx + Dx[i]][ly] != 2)
					{
						data[lx][ly] = 0;
						lx += Dx[i];
						
					}
					else{
						data[lx][ly] = 1;
						break;
					}
				}
				
			}
			else if(lx <= rx){
				while(1){
					if(data[lx + Dx[i]][ly] != 9)
					{
						data[lx][ly] = 0;
						lx += Dx[i];
						
					}
					else{
						data[lx][ly] = 1;
						break;
					}
				}
				while(1){
					if(data[rx + Dx[i]][ry] != 9 && data[rx + Dx[i]][ry] != 1)
					{
						data[rx][ry] = 0;
						rx += Dx[i];
						
					}
					else{
						data[rx][ry] = 2;
						break;
					}
				}
				
			}
			DFS(lx,ly,rx,ry,step + 1,i);
			data[lx][ly] = 0;
			data[rx][ry] = 0;
			lx = ox;
			ly = oy;
			rx = tx;
			ry = ty;
			data[lx][ly] = 1;
			data[rx][ry] = 2;
		}
		else if(i == 2){
			if(ly > ry){
				while(1){
					if(data[rx][ry + Dy[i]] != 9)
					{
						data[rx][ry] = 0;
						ry += Dy[i];
						
					}
					else{
						data[rx][ry] = 2;
						break;
					}
				}
				while(1){
					if(data[lx][ly + Dy[i]] != 9 && data[lx][ly + Dy[i]] != 2)
					{
						data[lx][ly] = 0;
						ly += Dy[i];
						
					}
					else{
						data[lx][ly] = 1;
						break;
					}
				}
				
			}
			else if(ly <= ry){
				while(1){
					if(data[lx][ly + Dy[i]] != 9)
					{
						data[lx][ly] = 0;
						ly += Dy[i];
						
					}
					else{
						data[lx][ly] = 1;
						break;
					}
				}
				while(1){
					if(data[rx][ry + Dy[i]] != 9 && data[rx][ry + Dy[i]] != 1)
					{
						data[rx][ry] = 0;
						ry += Dy[i];
						
					}
					else{
						data[rx][ry] = 2;
						break;
					}
				}
				
			}
			DFS(lx,ly,rx,ry,step + 1,i);
			data[lx][ly] = 0;
			data[rx][ry] = 0;
			lx = ox;
			ly = oy;
			rx = tx;
			ry = ty;
			data[lx][ly] = 1;
			data[rx][ry] = 2;
		}
		else if(i == 3){
			if(ly > ry){
				while(1){
					if(data[lx][ly + Dy[i]] != 9)
					{
						data[lx][ly] = 0;
						ly += Dy[i];
						
					}
					else{
						data[lx][ly] = 1;
						break;
					}
				}
				while(1){
					if(data[rx][ry + Dy[i]] != 9 && data[rx][ry + Dy[i]] != 1)
					{
						data[rx][ry] = 0;
						ry += Dy[i];
						
					}
					else{
						data[rx][ry] = 2;
						break;
					}
				}
			}
			else if(ly <= ry){
				while(1){
					if(data[rx][ry + Dy[i]] != 9)
					{
						data[rx][ry] = 0;
						ry += Dy[i];
						
					}
					else{
						data[rx][ry] = 2;
						break;
					}
				}
				while(1){
					if(data[lx][ly + Dy[i]] != 9 && data[lx][ly + Dy[i]] != 2)
					{
						data[lx][ly] = 0;
						ly += Dy[i];
						
					}
					else{
						data[lx][ly] = 1;
						break;
					}
				}
			}
			DFS(lx,ly,rx,ry,step + 1,i);
			data[lx][ly] = 0;
			data[rx][ry] = 0;
			lx = ox;
			ly = oy;
			rx = tx;
			ry = ty;
			data[lx][ly] = 1;
			data[rx][ry] = 2;
		}
	}
}