import java.util.*;
import java.io.*;
 
public class AiseHi {
	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; 
        } 
    }
	static FastReader sc = new FastReader();
	static List<Integer> g[];
	static boolean vis[];
	public static void main (String[] args) {
		PrintWriter out = new PrintWriter(System.out);
		int t = 1;
    	t = sc.nextInt();
    	while(t-->0) {
    		int n = sc.nextInt();
    		int m = sc.nextInt();
    		char[][] maz = new char[n][m];
    		for(int i=0;i<n;i++) {
    			String s = sc.next();
    			maz[i] = s.toCharArray();
    		}
    		solve(n,m,maz);
      	}
		out.close();
	}
	private static void solve(int n, int m, char[][] maz) {
		for(int i=0;i<n;i++) {
			for(int j=0;j<m;j++) {
				if(maz[i][j] == 'B') {
					for(int dx=-1;dx<2;dx++) {
						for(int dy=-1;dy<2;dy++) {
							if(dx != 0 && dy != 0) continue;
							if(isSafe(i+dx,j+dy,maz)) {
								if(maz[i+dx][j+dy] == 'G') {
									System.out.println("NO");
									return;
								}
								if(maz[i+dx][j+dy] == '.')
									maz[i+dx][j+dy] = '#';
							}
						}
					}
				}
			}
		}
		
		int esc = (m)*(n-1) + m;
		DSU dsu = new DSU(4 * ((m)*(n-1) + m + 1));
		for(int i=0;i<n;i++) {
			for(int j=0;j<m;j++) {
				if(maz[i][j] != '#') {
					for(int dx=-1;dx<2;dx++) {
						for(int dy=-1;dy<2;dy++) {
							if(dx != 0 && dy != 0) continue;
							if(isSafe(i+dx,j+dy,maz) && maz[i+dx][j+dy]!='#') {
								dsu.join((i)*(m)+j+1, (i+dx)*(m)+(j+dy+1));
							}
						}
					}
				}
			}
		}
		for(int i=0;i<n;i++) {
			for(int j=0;j<m;j++) {
				if(maz[i][j] == 'G') {
					if(dsu.findPar((i)*(m)+j+1)!=dsu.findPar(esc)) {
						System.out.println("NO");
						return;
					}
				}
			}
		}
		System.out.println("YES");
	}
	static boolean isSafe(int i,int j,char[][] maz) {
		int n = maz.length;
		int m = maz[0].length;
		return i>=0 && j>=0 && i<n && j<m;
	}
}
class DSU {
	int par[];
	int size[];
	DSU(int n) {
		par = new int[n];
		size = new int[n];
		Arrays.fill(size, 1);
		for(int i=0;i<n;i++) par[i] = i;
	}
	int findPar(int x) {
		if(x == par[x]) return x;
		
		return par[x] = findPar(par[x]);
	}
	boolean join(int u,int v) {
		int fu = findPar(u);
		int fv = findPar(v);
		if(fu!=fv) {
			if(size[fu]>=size[fv]) {
				par[fv] = fu;
				size[fu] += size[fv];
			}
			else {
				par[fu] = fv;
				size[fv] += size[fu];
			}
			return true;
		}
		else 
			return false;
	}
}
class pair implements Comparable<pair>{
	int a;
	long b;
	pair(int a,long b){
		this.a = a;
		this.b = b;
	}
	@Override
	public int compareTo(pair o) {
		if(this.a!=o.a)
			return (int) (this.a - o.a);
		else
			return (int)(this.b - o.b);
	}
}