import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.util.LinkedList;
import java.util.HashSet;
import java.util.StringTokenizer;
import java.util.*;

public class Main {
    public static boolean recur(char [][]arr, int i, int j, int n, int m)
    {
        if(i>=1 && i<n && j>=0 && j<m){
            if(arr[i-1][j]=='G')
               return false;
            if(arr[i-1][j]=='.')
               arr[i-1][j] = '#';
        }
        if(i>=0 && i<n-1 && j>=0 && j<m){
            if(arr[i+1][j]=='G')
               return false;
            if(arr[i+1][j]=='.')
               arr[i+1][j] = '#';
        }
        if(i>=0 && i<n && j>=1 && j<m){
            if(arr[i][j-1]=='G')
               return false;
            if(arr[i][j-1]=='.')
               arr[i][j-1] = '#';
        }
        if(i>=0 && i<n && j>=0 && j<m-1){
            if(arr[i][j+1]=='G')
               return false;
            if(arr[i][j+1]=='.')
               arr[i][j+1] = '#';
        }
        return true;
           
    }
    public static void dfs(boolean [][]vis, int i, int j, char [][]arr, int n, int m)
    {
        if(i<0 || i>=n || j<0 || j>=m || arr[i][j]=='#' || vis[i][j])
            return;
        vis[i][j] = true;
        
        dfs(vis, i-1, j, arr, n, m);
        dfs(vis, i, j-1, arr, n, m);
        dfs(vis, i+1, j, arr, n, m);
        dfs(vis, i, j+1, arr, n, m);
    }
	public static void main(String[] args) {
		FastScanner sc=new FastScanner();
		PrintWriter out=new PrintWriter(System.out);
		
		int test = sc.nextInt();
		while(test-->0)
		{
		    int n = sc.nextInt();
		    int m = sc.nextInt();
    		char [][]arr = new char[n][m];
    		for(int i=0;i<n;i++){
    		    String str = sc.next();
    		    for(int j=0;j<m;j++)
    		      arr[i][j] = str.charAt(j);
    		}
    		boolean flag=false, isG=false;   
    		for(int i=0;i<n;i++)
    		{
    		    for(int j=0;j<m;j++)
    		    {
    		        if(arr[i][j] == 'G')
    		           isG=true;
    		        if(arr[i][j] == '#')
    		           continue;
    		        else if(arr[i][j] == 'B'){
    		            if(!recur(arr, i, j, n, m)){
    		                flag=true;
    		                break;
    		            }
    		        }     
    		    }
    		    if(flag)
    		      break;
    		}
    		if(arr[n-1][m-1] == '#' && isG)
    		   flag=true;
    		   
    // 		for(int i=0;i<n;i++){
    // 		    for(int j=0;j<m;j++)
    // 		       out.print(arr[i][j]+" ");
    // 		    out.println();     
    // 		}
    		   
    		if(flag){
    		    out.println("No");
    		    continue;
    		}
    		boolean [][]vis = new boolean[n][m];
    		dfs(vis, n-1, m-1, arr, n, m);
    		
    		for(int i=0;i<n;i++)
    		{
    		    for(int j=0;j<m;j++)
    		    {
    		        if(arr[i][j] == 'G' && !vis[i][j]){
    		                flag=true;
    		                break;
    		        }
    		    }
    		    if(flag)
    		       break;
    		}
    		if(flag)
    		   out.println("No");
    		else
    		   out.println("Yes");
		}
		    
		out.close();
	}
	static class FastScanner {
		BufferedReader br;
		StringTokenizer st;
 
		public FastScanner() {
			try	{
				br = new BufferedReader(new InputStreamReader(System.in));
				st = new StringTokenizer(br.readLine());
			} catch (Exception e){e.printStackTrace();}
		}
 
		public String next() {
			if (st.hasMoreTokens())	return st.nextToken();
			try {st = new StringTokenizer(br.readLine());}
			catch (Exception e) {e.printStackTrace();}
			return st.nextToken();
		}
 
		public int nextInt() {return Integer.parseInt(next());}
 
		public long nextLong() {return Long.parseLong(next());}
 
		public double nextDouble() {return Double.parseDouble(next());}
 
		public String nextLine() {
			String line = "";
			if(st.hasMoreTokens()) line = st.nextToken();
			else try {return br.readLine();}catch(IOException e){e.printStackTrace();}
			while(st.hasMoreTokens()) line += " "+st.nextToken();
			return line;
		}
	}
}




















