向前走,何处是终点呢?向前走,何处是终点呢?

//CodeForces - 1365D
#include<iostream>
#include<string.h>
using namespace std;
int x_f[4] = {-1,0,1,0};
int y_f[4] = {0,1,0,-1};
char mp[55][55];
bool vis[55][55];
int t,n,m;
struct MAN{
	int x,y;
}bad_loc[2500],good_loc[2500];



void dfs(int x,int y){
	vis[x][y] = 1;
	for(int i = 0;i < 4;i++){
		int a = x + x_f[i];
		int b = y + y_f[i];
		if(a >= 1 && a <= n && b >= 1 && b <= m && mp[a][b] != '#' && !vis[a][b])
			dfs(a,b);
	}
}


void solve(){
	int cnt_g = 0,cnt_b = 0;
	for(int i = 1;i <= n;i++){
		for(int j = 1;j <= m;j++){
			if(mp[i][j] == 'B'){
				bad_loc[cnt_b].x = i;bad_loc[cnt_b].y = j;
				cnt_b++;
			}
			if(mp[i][j] == 'G'){
				good_loc[cnt_g].x = i;good_loc[cnt_g].y = j;
				cnt_g++;
			}
		}
	}
	if(cnt_g == 0){
		cout << "Yes\n";
		return;
	}else{
		int flag1 = 0; 
		for(int i = 0;i < cnt_b;i++){
			int x_1 = bad_loc[i].x,y_1 = bad_loc[i].y;
			for(int j = 0;j < 4;j++){
				if(mp[x_1+x_f[j]][y_1+y_f[j]] == 'G'){
					flag1++;
				}
			}
			if(flag1 > 0){
				cout << "No\n";
				return;
			}else{
				for(int j = 0;j < 4;j++) {
            		int a = x_1 + x_f[j];
            		int b = y_1 + y_f[j];
            		if (a >= 1 && a <= n && b >= 1 && b <= m && mp[a][b] == '.') {
                		mp[a][b] = '#';
                	}
            	}
			}
		}
		memset(vis,0,sizeof vis);
		if(mp[n][m] != '#'){
			dfs(n,m);
		}
		
		for(int i = 0;i < cnt_g;i++) {
			int xxx = good_loc[i].x;
			int yyy = good_loc[i].y;
			if(!vis[xxx][yyy]){
				cout << "No\n";
				return;
			}
		}
		for (int i = 0;i < cnt_b; i++){
        	int xxxxx = bad_loc[i].x;
        	int yyyyy = bad_loc[i].y;
        	if (vis[xxxxx][yyyyy]){ 
        	    cout << "No\n";
         	   return;
        	}
    	}	
		cout << "Yes\n";
	}
}
//ccf
int main(){
	cin >> t;
	while(t--){
		cin >> n >> m;
		for(int i = 1;i <= n;i++)
			for(int j = 1;j <= m;j++)
				cin >> mp[i][j];
		solve();
	}
	return 0;
}