#include<bits/stdc++.h>
using namespace std;
///左上右下四个方向(-1,0),(0,-1),(1,0),(0,1)
int dx[] = {-1,0,1,0};
int dy[] = {0,-1,0,1};
char mp[510][510];///地图
int vis[510][510];///标记是否走过
int n,m;
int flag;///是否能到达终点

void dfs(int x,int y)///深度优先搜索
{
    vis[x][y] = 1;///标记为走过的点
    if(mp[x][y]=='t')flag = 1;///到达终点
    for(int i=0;i<4;i++){
        int xx = x + dx[i];///下一步的x坐标
        int yy = y + dy[i];///下一步的y坐标
        if(xx<1||xx>n||yy<1||yy>m)continue;///地图范围外
        if(mp[xx][yy]=='x'||vis[xx][yy])continue;///障碍物或者走过的点
        dfs(xx,yy);///递归
    }
}

int main()
{
    int t;
    cin>>t;///输入数据组数
    while(t--){
        flag = 0;///初始化
        memset(vis,0,sizeof(vis));///初始化
        cin>>n>>m;///输入地图的长与宽
        int ox,oy;
        for(int i=1;i<=n;i++)
            for(int j=1;j<=m;j++){
                cin>>mp[i][j];///输入地图
                if(mp[i][j]=='s'){///起始点坐标
                    ox = i;
                    oy = j;
                }
            }
        dfs(ox,oy);///将起始点坐标先放入
        if(flag==1)///是否能到达终点
            cout<<"YES"<<endl;///注意输出细节
        else
            cout<<"NO"<<endl;///注意输出细节
    }
    return 0;
}
///完美结束ヾ(◍°∇°◍)ノ゙