#include<bits/stdc++.h>
#define D(x) std::cerr<<#x<<'='<<x;
int t,n,m,vis[22][22],ans;
char a[22][22];
void dfs(int x,int y,int ps){
if(x==n&&y==m){
ans=std::min(ans,ps);
return;
}
if(a[x][y]=='-'){
if(y>1&&!vis[x][y-1])vis[x][y-1]=1,dfs(x,y-1,ps+1),vis[x][y-1]=0;
if(y<m&&!vis[x][y+1])vis[x][y+1]=1,dfs(x,y+1,ps+1),vis[x][y+1]=0;
}
else if(a[x][y]=='|'){
if(x>1&&!vis[x-1][y])vis[x-1][y]=1,dfs(x-1,y,ps+1),vis[x-1][y]=0;
if(x<n&&!vis[x+1][y])vis[x+1][y]=1,dfs(x+1,y,ps+1),vis[x+1][y]=0;
}
else if(a[x][y]=='+'){
if(x>1&&!vis[x-1][y])vis[x-1][y]=1,dfs(x-1,y,ps+1),vis[x-1][y]=0;
if(x<n&&!vis[x+1][y])vis[x+1][y]=1,dfs(x+1,y,ps+1),vis[x+1][y]=0;
if(y>1&&!vis[x][y-1])vis[x][y-1]=1,dfs(x,y-1,ps+1),vis[x][y-1]=0;
if(y<m&&!vis[x][y+1])vis[x][y+1]=1,dfs(x,y+1,ps+1),vis[x][y+1]=0;
}
}
signed main(){
scanf("%d",&t);
while(t--){
scanf("%d%d",&n,&m),memset(vis,0,sizeof vis),ans=INT_MAX;
for(int i=1;i<=n;i++)scanf("%s",a[i]+1);
dfs(1,1,0),printf("%d\n",ans<INT_MAX?ans+1:-1);
}
return 0;
}