#include<iostream>
#include<cstring>
#include<queue>
using namespace std;
struct MAP
{
int x,y,step;
}s,e,head,tail;
char g[100][100];
int v[100][100],f[][2]={{-1,0},{0,1},{1,0},{0,-1}},n,m;
int bfs()
{
memset(v,0,sizeof(v));
queue<struct MAP> q;
q.push(s);
s.step=0;
v[s.x][s.y]=1;
while(!q.empty())
{
head=q.front();
q.pop();
for(int i=0;i<4;i++)
{
tail.x=head.x+f[i][0];
tail.y=head.y+f[i][1];
tail.step=head.step+1;
if(!v[tail.x][tail.y]&&g[tail.x][tail.y]!='#'&&tail.x>=0&&tail.x<n&&tail.y>=0&&tail.y<m)
{
if(tail.x==e.x&&tail.y==e.y)
return tail.step;
v[tail.x][tail.y]=1;
q.push(tail);
}
}
}
return -1;
}
int main()
{
int t,i,j;
cin>>t;
while(t--)
{
cin>>n>>m;
for(i=0;i<n;i++)
for(j=0;j<m;j++)
{
cin>>g[i][j];
if(g[i][j]=='S')
{
s.x=i;
s.y=j;
}
else if(g[i][j]=='E')
{
e.x=i;
e.y=j;
}
}
cout<<bfs()<<endl;
}
return 0;
}
/**************************************************************
Problem: 2125
User: admin
Language: C++
Result: Accepted
Time:9 ms
Memory:2124 kb
****************************************************************/