import java.util.LinkedList;
import java.util.Queue;
import java.util.Scanner;


public class Main {
	static int m,n;
	public static void main(String[] args) {
		Scanner in = new Scanner(System.in);
		int x = in.nextInt();
		for(int ii=0;ii<x;ii++){
			 m = in.nextInt();
			 n = in.nextInt();
			Node3 s = new Node3();
			Node3 e = new Node3();
			char[][] maze = new char[m][n];
			for(int i=0;i<m;i++){
				String str = in.next();
				for(int j=0;j<n;j++){
					maze[i][j] = str.charAt(j);
					if(maze[i][j]=='S'){
						s.x=i;
						s.y=j;
					}
					else if(maze[i][j]=='E'){
						e.x=i;
						e.y=j;
					}
				}
			}
			System.out.println(bfs(maze,s,e));
		}
	}

	public static int bfs(char[][] maze, Node3 s, Node3 e) {
		int[][] d = { { 0, 1 }, { 0, -1 }, { 1, 0 }, { -1, 0 } };
		Queue<Node3> q = new LinkedList<Node3>();
		q.add(s);
		maze[s.x][s.y] = '@';
		while (!q.isEmpty()) {
			Node3 t = q.poll();
			for (int i = 0; i < 4; i++) {
				int xx = t.x + d[i][0];
				int yy = t.y + d[i][1];
				if (xx == e.x && yy == e.y){
					return t.d+1;
				}
			}
			for (int i = 0; i < 4; i++) {
				int xx = t.x + d[i][0];
				int yy = t.y + d[i][1];
				if (xx >= 0 && xx < m && yy >= 0 && yy < n
						&& maze[xx][yy] == '-') {
					maze[xx][yy] = '@';
					q.add(new Node3(xx, yy, t.d + 1));
				}
			}
		}
		return -1;
	}
	
}
class Node3{
	int x,y,d;
	public Node3(){
		d = 0;
	}
	public Node3(int a,int b,int c){
		x = a;
		y = b;
		d = c;
	}
}

/**************************************************************
	Problem: 2125
	User: admin
	Language: Java
	Result: Accepted
	Time:731 ms
	Memory:41356 kb
****************************************************************/