#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
****************************************************************/