// Working program with FastReader 
import java.io.BufferedReader; 
import java.io.IOException; 
import java.io.InputStreamReader; 
import java.util.Scanner; 
import java.util.HashMap; 
import java.util.StringTokenizer; 

public class Main 
{ 
    static int n,m;
    static int cats;
    static boolean flag=true;
    public static void main(String[] args) 
	{ 
		FastReader sc=new FastReader(); 
		int t=sc.nextInt();
	    while(t-->0){
	         flag=true;
	         cats=0;
	         n=sc.nextInt();
	         m=sc.nextInt();
	         
	        char[][] maze = new char[n][m];
	        for(int i=0;i<n;i++) maze[i]=sc.next().toCharArray();
	        int totalC=0;
	        int totalB=0;
	        for(int i=0;i<n;i++){
	            for(int j=0;j<m;j++){
	                if(maze[i][j] == 'G') totalC++;
	                if(maze[i][j] == 'B') totalB++;
	                
	            }
	        }
	        if(totalC == 0){
	            System.out.println("Yes");
	            continue;
	        }
	        if(totalB == 0){
	             boolean vis[][]=new boolean[n][m];
	             findCats(n-1,m-1,maze,vis);
	             if(cats == totalC){
	                 System.out.println("Yes");
	             }
	             else System.out.println("No");
	            continue;
	        }
	        
	        
	        if(!ratAdj(maze)){
	            System.out.println("No");
	            continue;
	        }
	        ratCage(maze);
	        cats=0;
	        boolean vis[][]=new boolean[n][m];
	        findCats(n-1,m-1,maze,vis);
	        
	        if(flag && cats == totalC) System.out.println("Yes");
	        else System.out.println("No");
	    }
	
	} 
	
	static void findCats(int i,int j,char[][] maze,boolean [][] vis){

	    if(i>=n || j>=m ||i <0 || j<0 || maze[i][j] == '#'|| vis[i][j]) return;
	    if(maze[i][j] == 'B'){
	        flag=false;
	        return;
	    }
	    if(maze[i][j] == 'G') cats++;
	    vis[i][j]=true;
	    findCats(i+1,j,maze,vis);
	    findCats(i,j+1,maze,vis);
	    findCats(i,j-1,maze,vis);
	    findCats(i-1,j,maze,vis);
	   	}
	   	
	  static boolean ratAdj(char [][] maze){
	      
	      for(int i=0;i<n;i++){
	          for(int j=0;j<m;j++){
	              if(maze[i][j] == 'B'){
	                  if(valid(i-1,j) && maze[i-1][j] == 'G') return false;
	                  if(valid(i,j-1) && maze[i][j-1] == 'G') return false;
	                  if(valid(i,j+1) && maze[i][j+1] == 'G') return false;
	                  if(valid(i+1,j) && maze[i+1][j] == 'G') return false;
	              }
	          }
	      }
	      return true;
	  }
	
	    static void ratCage(char maze[][]){
	        for(int i=0;i<n;i++){
	            for(int j=0;j<m;j++){
	                if(maze[i][j] == 'B'){
	                  if(validB(i-1,j) && maze[i-1][j] != 'B' ) maze[i-1][j] = '#';
	                  if(validB(i,j-1) && maze[i][j-1] != 'B') maze[i][j-1] = '#';
	                  if(validB(i,j+1) && maze[i][j+1] != 'B') maze[i][j+1] = '#';
	                  if(validB(i+1,j) && maze[i+1][j] != 'B') maze[i+1][j] = '#';
	                }
	            }
	        }
	    }
	
	static boolean valid(int i,int j){
	    if(i>=0 && i<n && j>=0 && j<m) return true;
	    return false;
	}
	static boolean validB(int i,int j){
	    if(i>=0 && i<n && j>=0 && j<m && !(i == n-1 && j == m-1)) return true;
	    return false;
	}
	
	
	static class FastReader 
	{ 
		BufferedReader br; 
		StringTokenizer st; 

		public FastReader() 
		{ 
			br = new BufferedReader(new
					InputStreamReader(System.in)); 
		} 

		String next() 
		{ 
			while (st == null || !st.hasMoreElements()) 
			{ 
				try
				{ 
					st = new StringTokenizer(br.readLine()); 
				} 
				catch (IOException e) 
				{ 
					e.printStackTrace(); 
				} 
			} 
			return st.nextToken(); 
		} 

		int nextInt() 
		{ 
			return Integer.parseInt(next()); 
		} 

		long nextLong() 
		{ 
			return Long.parseLong(next()); 
		} 

		double nextDouble() 
		{ 
			return Double.parseDouble(next()); 
		} 

		String nextLine() 
		{ 
			String str = ""; 
			try
			{ 
				str = br.readLine(); 
			} 
			catch (IOException e) 
			{ 
				e.printStackTrace(); 
			} 
			return str; 
		} 
	} 


} 