#include <iostream>
using namespace std;
int fang[4][2]={{1,0},{-1,0},{0,1},{0,-1}};
int map[10][10];
int map1[10][10];
int n;
int high;
int wide;
int xx1,yy1,xx2,yy2;
int step;
int blmin;
void slip(int newx1,int newy1,int newx2,int newy2);
void search();
bool stop(int x,int y);
int main()
{
freopen("in.txt","r",stdin);
cin >>n;
for(int i=0;i<n;i++)
{
blmin=10;
step=0;
cin >>high;
cin >>wide;
for(int j=0;j<high;j++)
{
for(int k=0;k<wide;k++)
{
cin >>map[j][k];
map1[j][k]=map[j][k];
}
}
search();
slip(xx1,yy1,xx2,yy2);
if(blmin==10)
blmin=-1;
cout <<blmin<<endl;
/*for(int i=0;i<high;i++)
{
for(int j=0;j<wide;j++)
{
cout <<map1[i][j]<<" ";
}
cout <<endl;
}
cout <<xx1<<endl;
cout <<yy1<<endl;
cout <<xx2<<endl;
cout <<yy2<<endl;
cout <<step<<endl;*/
}
return 0;
}
void search()
{
for(int i=0;i<high;i++)
for(int j=0;j<wide;j++)
{
if(map[i][j]==1)
{
xx1=i;
yy1=j;
}
if(map[i][j]==2)
{
xx2=i;
yy2=j;
}
}
}
bool stop(int x,int y)
{
bool ret=true;
if(x>=high||y>=wide||x<0||y<0||map[x][y]==9||map1[x][y]==1||map1[x][y]==2)
ret=false;
return ret;
}
void slip(int newx1,int newy1,int newx2,int newy2)
{
int ret;
int a=newx1;
int b=newy1;
int c=newx2;
int d=newy2;
if(step==9)
return;
if(map[newx1][newy1]==-1&&map[newx2][newy2]==-2)
{
if(step<blmin)
blmin=step;
return;
}
for(int i=0;i<4;i++)
{
map1[a][b]=0;
while(1)
{
a=a+fang[i][0];
b=b+fang[i][1];
ret=stop(a,b);
if(ret==false)
{
a=a-fang[i][0];
b=b-fang[i][1];
break;
}
}
map1[a][b]=1;
map1[c][d]=0;
while(1)
{
c=c+fang[i][0];
d=d+fang[i][1];
ret=stop(c,d);
if(ret==false)
{
c=c-fang[i][0];
d=d-fang[i][1];
break;
}
}
map1[c][d]=2;
map1[a][b]=0;
while(1)
{
a=a+fang[i][0];
b=b+fang[i][1];
ret=stop(a,b);
if(ret==false)
{
a=a-fang[i][0];
b=b-fang[i][1];
break;
}
}
map1[a][b]=1;
step++;
slip(a,b,c,d);
map1[a][b]=0;
map1[c][d]=0;
map1[newx1][newy1]=1;
map1[newx2][newy2]=2;
step--;
}
}