import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.HashSet;
import java.util.LinkedList;
import java.util.Queue;
import java.util.Set;
import java.util.StringTokenizer;



public class q4 {
	
	public static void main(String[] args) {
		FastReader s = new FastReader();
		int t = s.nextInt();
		int[][] dir = new int[][]{
			{0,1},{0,-1},{1,0},{-1,0}
			};
			
		while(t-- > 0)
		{
			int n = s.nextInt();
			int m = s.nextInt();
			
			StringBuilder[] inp = new StringBuilder[n];
			for(int i=0;i<n;++i)
				inp[i]=new StringBuilder(s.next());
			int flag = 0;
			int[][] visited = new int[n][m];
			int f = 0;
			for(int i=0;i<n;++i)
			{
				for(int j=0;j<m;++j)
				{
					if(inp[i].charAt(j) == 'B')
					{
						visited[i][j] = -1;
						for(int k=0;k<4;++k)
						{
							int x = i + dir[k][0];
							int y = j + dir[k][1];
							
							if(x>=0 && x<n && y>=0 && y < m)
							{
								if(inp[x].charAt(y) == 'G')
								{
									f = 1;
									flag = 1;break;
								}
								else if(inp[x].charAt(y) == '.')
									{
										inp[x].setCharAt(y, '#');
										visited[x][y] = -1;
									}
							}
						}
						if(flag == 1)
							break;
					}
					else if(inp[i].charAt(j) == 'G')
						f=1;
					else if(inp[i].charAt(j) == '#')
						visited[i][j] = -1;
				}
				if(flag == 1)
					break;
			}
			
			if(f == 0)
				System.out.println("YES");
			else if(flag == 1 || inp[n-1].charAt(m-1)=='#')
				System.out.println("NO");
			else
			{
				visited[n-1][m-1] = 1;
				
				int a = 0;
				for(int i=0;i<n;++i)
				{
					for(int j=0;j<m;++j)
					{
						if(inp[i].charAt(j) == 'G')
						{
							int ans = -1;
							if(visited[i][j] == 0)
							{
								visited[i][j] = -1;
								for(int k = 0;k<4;++k)
								{
									int x = i + dir[k][0];
									int y = j + dir[k][1];
									
									ans = dfs(x,y,visited);
									
									if(ans == 1)
										break;
										
								}
								
								if(ans == 1)
									visited[i][j] = 1;
								else{
									a = -1;break;
								}
							}

						}
					}
					if(a == -1)
						break;
				}
				
				if(a == -1)
					System.out.println("NO");
				else System.out.println("YES");
				
			}
			
		}

	
	}


	private static int dfs(int i, int j, int[][] visited) {
		int n = visited.length;
		int m = visited[0].length;

		if(i<0 || j < 0 || i>=n || j >= m || visited[i][j] == -1)
			return -1;
		if(visited[i][j] == 1)
			return 1;
		
		
		int[][] dir = new int[][]{
			{0,1},{0,-1},{1,0},{-1,0}
			};
		visited[i][j] = -1;
		int ans = -1;
		for(int k=0;k<4;++k)
		{
			int x = i + dir[k][0];
			int y = j + dir[k][1];
		
			if(x>=0 && y >= 0 && x<n && y < m && visited[x][y] != -1)
				ans = dfs(x,y,visited);
			
			if(ans == 1)
				{
					visited[i][j] = 1;
					return 1;
				}
		}
		
		return -1;
	}


	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;
        }
    }

}
