import java.util.*;
import java.io.*;
import java.io.BufferedReader;

public class Z_D{
	public static final String TASKNAME = "";
	public static final long mod= 1000000007;

	public static void main(String[] args) throws IOException {
		InputReader in = new InputReader(System.in);
		PrintWriter out = new PrintWriter(System.out);
//		InputReader in = new InputReader(new FileInputStream(TASKNAME+".in"));
//		PrintWriter out = new PrintWriter(new BufferedWriter(new FileWriter(TASKNAME+".out")));
		Autocompletion solver = new Autocompletion();
		solver.solve(1, in, out, new Debug(System.getSecurityManager()==null));
		out.close();
	}
	static class Autocompletion {

		public void solve(int testNumber, InputReader in, PrintWriter out, Debug db) {
			int t=in.nextInt();
			for(int z1=0;z1<t;z1++) {
				int n=in.nextInt();
				int m=in.nextInt();
				int arr[][]=new int[n][m];
				for(int i=0;i<n;i++) {
					String s=in.next();
					for(int j=0;j<m;j++) {
						if(s.charAt(j)=='.') {
							arr[i][j]=0;
						}
						if(s.charAt(j)=='#') {
							arr[i][j]=1;
						}
						if(s.charAt(j)=='B') {
							arr[i][j]=2;
						}
						if(s.charAt(j)=='G') {
							arr[i][j]=3;
						}
					}
				}
//				int s[][]=new int[n][m];
//				ArrayDeque<Pair> dq=new ArrayDeque<Pair>();
//				dq.add(new Pair(n-1,m-1));
//				if(arr[n-1][m-1]==2) {
//					out.println("No");
//					continue;
//				}
//				s[n-1][m-1]=1;
//				while(!dq.isEmpty()) {
//					Pair x=dq.remove();
//					if(x.r!=0 && arr[x.r-1][x.c]!=1) {
//						if(arr[x.r-1][x.c]==2 && s[x.r-1][x.c]!=2) {
//							s[x.r-1][x.c]=2;
//							dq.add(new Pair(x.r-1,x.c));
//						}
//						else if(s[x.r-1][x.c]==0) {
//							s[x.r-1][x.c]=s[x.r][x.c];
//							dq.add(new Pair(x.r-1,x.c));
//						}
//					}
//					if(x.r!=n-1 && arr[x.r+1][x.c]!=1) {
//						if(arr[x.r+1][x.c]==2 && s[x.r+1][x.c]!=2) {
//							s[x.r+1][x.c]=2;
//							dq.add(new Pair(x.r+1,x.c));
//						}
//						else if(s[x.r+1][x.c]==0) {
//							s[x.r+1][x.c]=s[x.r][x.c];
//							dq.add(new Pair(x.r+1,x.c));
//						}
//					}
//					if(x.c!=0 && arr[x.r][x.c-1]!=1) {
//						if(arr[x.r][x.c-1]==2 && s[x.r][x.c-1]!=2) {
//							s[x.r][x.c-1]=2;
//							dq.add(new Pair(x.r,x.c-1));
//						}
//						else if(s[x.r][x.c-1]==0) {
//							s[x.r][x.c-1]=s[x.r][x.c];
//							dq.add(new Pair(x.r,x.c-1));
//						}
//					}
//					if(x.c!=m-1 && arr[x.r][x.c+1]!=1) {
//						if(arr[x.r][x.c+1]==2 && s[x.r][x.c+1]!=2) {
//							s[x.r][x.c+1]=2;
//							dq.add(new Pair(x.r,x.c+1));
//						}
//						else if(s[x.r][x.c+1]==0) {
//							s[x.r][x.c+1]=s[x.r][x.c];
//							dq.add(new Pair(x.r,x.c+1));
//						}
//					}
//				}
				for(int i=0;i<n;i++) {
					for(int j=0;j<m;j++) {
						if(arr[i][j]==2) {
							if(i!=0 && arr[i-1][j]!=3) {
								arr[i-1][j]=1;
							}
							if(i!=n-1 && arr[i+1][j]!=3) {
								arr[i+1][j]=1;
							}
							if(j!=0 && arr[i][j-1]!=3) {
								arr[i][j-1]=1;
							}
							if(j!=m-1 && arr[i][j+1]!=3) {
								arr[i][j+1]=1;
							}
						}
					}
				}
				boolean w=true;
				for(int i=0;i<n;i++) {
					for(int j=0;j<m;j++) {
						if(arr[i][j]==3) {
							ArrayDeque<Pair> dq=new ArrayDeque<Pair>();
							dq.add(new Pair(i,j));
							int visited[][]=new int[n][m];
							while(!dq.isEmpty()) {
								Pair x=dq.remove();
								if(x.r!=0 && arr[x.r-1][x.c]!=1 && arr[x.r-1][x.c]!=2 && visited[x.r-1][x.c]==0) {
									visited[x.r-1][x.c]=1;
									dq.add(new Pair(x.r-1,x.c));
								}
								if(x.r!=n-1 && arr[x.r+1][x.c]!=1 && arr[x.r+1][x.c]!=2 && visited[x.r+1][x.c]==0) {
									visited[x.r+1][x.c]=1;
									dq.add(new Pair(x.r+1,x.c));
								}
								if(x.c!=0 && arr[x.r][x.c-1]!=1 && arr[x.r][x.c-1]!=2 && visited[x.r][x.c-1]==0) {
									visited[x.r][x.c-1]=1;
									dq.add(new Pair(x.r,x.c-1));
								}
								if(x.c!=m-1 && arr[x.r][x.c+1]!=1 && arr[x.r][x.c+1]!=2 && visited[x.r][x.c+1]==0) {
									visited[x.r][x.c+1]=1;
									dq.add(new Pair(x.r,x.c+1));
								}
							}
							if(visited[n-1][m-1]==0) {
								w=false;
							}
							if(i!=0 && arr[i-1][j]==2) {
								w=false;
							}
							if(i!=n-1 && arr[i+1][j]==2) {
								w=false;
							}
							if(j!=0 && arr[i][j-1]==2) {
								w=false;
							}
							if(j!=m-1 && arr[i][j+1]==2) {
								w=false;
							}
						}
					}
				}
				if(w) {
					out.println("Yes");
				}
				else {
					out.println("No");
				}
			}
		}
		static class Pair{
			int r;
			int c;
			Pair(int a, int b) {
				r=a;
				c=b;
			}
		}
	}

	static class InputReader {
        public BufferedReader reader;
        public StringTokenizer tokenizer;
 
        public InputReader(InputStream stream) {
            reader = new BufferedReader(new InputStreamReader(stream), 32768);
            tokenizer = null;
        }
 
        public String next() {
            while (tokenizer == null || !tokenizer.hasMoreTokens()) {
                try {
                    tokenizer = new StringTokenizer(reader.readLine());
                } catch (IOException e) {
                    throw new RuntimeException(e);
                }
            }
            return tokenizer.nextToken();
        }
 
        public int nextInt() {
            return Integer.parseInt(next());
        }
        public long nextLong() {
        	return Long.parseLong(next());
        }
        public int[] nextIntArr(int n) {
        	int arr[]=new int[n];
        	for(int i=0;i<n;i++) {
        		arr[i]=this.nextInt();
        	}
        	return arr;
        }
    }
	public static class Debug {
        private boolean allowDebug;
 
        public Debug(boolean allowDebug) {
            this.allowDebug = allowDebug;
        }
 
        private void outputName(String name) {
            System.out.print(name + " = ");
        }
 
        public void debug(String name, int x) {
            if (!allowDebug) {
                return;
            }
 
            outputName(name);
            System.out.println("" + x);
        }
 
        public void debug(String name, long x) {
            if (!allowDebug) {
                return;
            }
            outputName(name);
            System.out.println("" + x);
        }
 
        public void debug(String name, double x) {
            if (!allowDebug) {
                return;
            }
            outputName(name);
            System.out.println("" + x);
        }
 
        public void debug(String name, int[] x) {
            if (!allowDebug) {
                return;
            }
            outputName(name);
            System.out.println(Arrays.toString(x));
        }
 
        public void debug(String name, long[] x) {
            if (!allowDebug) {
                return;
            }
            outputName(name);
            System.out.println(Arrays.toString(x));
        }
 
        public void debug(String name, double[] x) {
            if (!allowDebug) {
                return;
            }
            outputName(name);
            System.out.println(Arrays.toString(x));
        }
 
        public void debug(String name, Object x) {
            if (!allowDebug) {
                return;
            }
            outputName(name);
            System.out.println("" + x);
        }
 
        public void debug(String name, Object... x) {
            if (!allowDebug) {
                return;
            }
            outputName(name);
            System.out.println(Arrays.deepToString(x));
        }
    }
}
