import java.util.*;		
import java.util.function.Function;
import java.util.stream.Collectors;
import java.io.*;
import java.math.*;
public class Main7{
	static public void main(String args[])throws IOException{
		int tt=i();
		StringBuilder sb=new StringBuilder();
		for(int ttt=1;ttt<=tt;ttt++){
			int n=i();
			int m=i();
			int count=0;
			char[][] ch=new char[n][m];
			for(int i=0;i<n;i++){
				String s=s();
				for(int j=0;j<m;j++){
					ch[i][j]=s.charAt(j);
					if(ch[i][j]=='G'){
						count++;
					}
				}
			}
			if(count==0){
				sb.append("Yes\n");
			}else{
			//	check initially blocked
				Queue<Pair> queue=new LinkedList<>();
				queue.add(new Pair(n-1,m-1));
				boolean[][] visited=new boolean[n][m];
				visited[n-1][m-1]=true;
				int[] dx=new int[]{1,-1,0,0};
				int[] dy=new int[]{0,0,1,-1};
				while(queue.isEmpty()==false){
					Pair p=queue.poll();
					for(int j=0;j<4;j++){
						int xx=p.x+dx[j];
						int yy=p.y+dy[j];
						if(xx<0 || yy<0 || xx>=n || yy>=m){
							continue;
						}
						if(visited[xx][yy]==false && ch[xx][yy]!='#'){
							visited[xx][yy]=true;
							queue.add(new Pair(xx,yy));
						}
					}
				}
				int tmp=0;
				for(int i=0;i<n;i++){
					for(int j=0;j<m;j++){
						if(ch[i][j]=='G'){
							if(visited[i][j]==false){
								tmp++;
							}
						}
					}
				}
				if(tmp>0){
					sb.append("No\n");
				}else{
					//check GGGBBB // BBBGGGGG
					boolean flag=false;
					for(int i=0;i<n;i++){
						for(int j=0;j<m;j++){
							if(j+1<m && ((ch[i][j]=='G' && ch[i][j+1]=='B') || (ch[i][j]=='B' && ch[i][j+1]=='G'))){
								flag=true;
							}
							if(i+1<n && ((ch[i][j]=='G' && ch[i+1][j]=='B') || (ch[i][j]=='B' && ch[i+1][j]=='G'))){
								flag=true;
							}
							if(i-1>=0 && ((ch[i][j]=='G' && ch[i-1][j]=='B') || (ch[i][j]=='B' && ch[i-1][j]=='G'))){
								flag=true;
							}
							if(j-1>=0 && ((ch[i][j]=='G' && ch[i][j-1]=='B') || (ch[i][j]=='B' && ch[i][j-1]=='G'))){
								flag=true;
							}
							if(i==n-1 && j+1==m-1 && ch[i][j]=='B'){
								flag=true;
							}
							if(i+1==n-1 && j==m-1 && ch[i][j]=='B'){
								flag=true;
							}
						}
					}
					if(flag){
						sb.append("No\n");
					}else{
						queue=new LinkedList<>();
						queue.add(new Pair(n-1,m-1));
						visited=new boolean[n][m];
						visited[n-1][m-1]=true;
						dx=new int[]{1,-1,0,0};
						dy=new int[]{0,0,1,-1};
						while(queue.isEmpty()==false){
							Pair p=queue.poll();
							for(int j=0;j<4;j++){
								int xx=p.x+dx[j];
								int yy=p.y+dy[j];
								if(xx<0 || yy<0 || xx>=n || yy>=m){
									continue;
								}
								if(visited[xx][yy]==false && ch[xx][yy]!='#' && ch[xx][yy]!='B'){
									visited[xx][yy]=true;
									queue.add(new Pair(xx,yy));
								}
							}
						}
						for(int i=0;i<n;i++){
							for(int j=0;j<m;j++){
								if(ch[i][j]=='G' && visited[i][j]==false){
									flag=true;
								}
							}
						}
						if(flag){
							sb.append("No\n");
						}else{
							for(int i=0;i<n;i++){
								for(int j=0;j<m;j++){
									if(ch[i][j]=='B'){
										if(i+1<n && ch[i+1][j]=='.'){
											ch[i+1][j]='#';
										}
										if(j+1<m && ch[i][j+1]=='.'){
											ch[i][j+1]='#';
										}
										if(j-1>=0 && ch[i][j-1]=='.'){
											ch[i][j-1]='#';
										}
										if(i-1>=0 && ch[i-1][j]=='.'){
											ch[i-1][j]='#';
										}
									}
								}
							}
							queue=new LinkedList<>();
							queue.add(new Pair(n-1,m-1));
							visited=new boolean[n][m];
							visited[n-1][m-1]=true;
							dx=new int[]{1,-1,0,0};
							dy=new int[]{0,0,1,-1};
							while(queue.isEmpty()==false){
								Pair p=queue.poll();
								for(int j=0;j<4;j++){
									int xx=p.x+dx[j];
									int yy=p.y+dy[j];
									if(xx<0 || yy<0 || xx>=n || yy>=m){
										continue;
									}
									if(visited[xx][yy]==false && ch[xx][yy]!='#' && ch[xx][yy]!='B'){
										visited[xx][yy]=true;
										queue.add(new Pair(xx,yy));
									}
								}
							}
							for(int i=0;i<n;i++){
								for(int j=0;j<m;j++){
									if(ch[i][j]=='G' && visited[i][j]==false){
										flag=true;
									}
								}
							}
							if(flag){
								sb.append("No\n");
							}else{
								sb.append("Yes\n");
							}
						}
					}
				}
			}
		}
		System.out.print(sb.toString());
	}
	static InputReader in=new InputReader(System.in);
	static OutputWriter out=new OutputWriter(System.out);
	static ArrayList<ArrayList<Integer>> graph;
	static int mod=1000000007;
	static class Pair{
		int x;
		int y;
		Pair(int x,int y){
			this.x=x;
			this.y=y;
		}
		@Override
		public int hashCode(){ 
			final int temp = 14; 
			int ans = 1; 
			ans =x*31+y*13; 
			return ans; 
		} 
       @Override
        public boolean equals(Object o) { 
            if (this == o) { 
                return true; 
            } 
            if (o == null) { 
                return false; 
            } 
            if (this.getClass() != o.getClass()) { 
                return false; 
            } 
            Pair other = (Pair)o; 
            if (this.x != other.x || this.y!=other.y) { 
                return false; 
            } 
            return true; 
        }
	}
	public static int[] sort(int[] a){
		int n=a.length;
		ArrayList<Integer> ar=new ArrayList<>();
		for(int i=0;i<a.length;i++){
			ar.add(a[i]);
		}
		Collections.sort(ar);
		for(int i=0;i<n;i++){
			a[i]=ar.get(i);
		}
		return a;
	}
	public static long pow(long a, long b){
        long result=1;
        while(b>0){
            if (b % 2 != 0){
                result=(result*a)%mod;
                b--;
            } 
            a=(a*a)%mod;
            b /= 2;
        }   
        return result;
    }
	public static long gcd(long a, long b){
        if (a == 0){
            return b;
		}
        return gcd(b%a, a);
    }
	public static long lcm(long a, long b){
		return a*(b/gcd(a,b));
	}
	public static long l(){
		String s=in.String();
		return Long.parseLong(s);
	}
	public static void pln(String value){
		System.out.println(value);
	}
	public static int i(){
		return in.Int();
	}
	public static String s(){
		return in.String();
	}
}
class InputReader 
{
	private InputStream stream;
	private byte[] buf = new byte[1024];
	private int curChar;
	private int numChars;
	private SpaceCharFilter filter;
	public InputReader(InputStream stream) {
		this.stream = stream;
	}
	public int read() {
		if (numChars== -1)
			throw new InputMismatchException();
		if (curChar >= numChars) {
			curChar = 0;
			try {
				numChars = stream.read(buf);
			} catch (IOException e) {
				throw new InputMismatchException();
			}
			if (numChars <= 0)
				return -1;
		}
		return buf[curChar++];
	}
	public int Int() {
		int c = read();
		while (isSpaceChar(c))
			c = read();
		int sgn = 1;
		if (c == '-') {
			sgn = -1;
			c = read();
		}
		int res = 0;
		do {
			if (c < '0' || c > '9')
				throw new InputMismatchException();
			res *= 10;
			res += c - '0';
			c = read();
		} while (!isSpaceChar(c));
		return res * sgn;
	}
	public String String() {
		int c = read();
		while (isSpaceChar(c))
			c = read();
		StringBuilder res = new StringBuilder();
		do {
			res.appendCodePoint(c);
			c = read();
		} while (!isSpaceChar(c));
		return res.toString();
	} 
	public boolean isSpaceChar(int c) {
		if (filter != null)
			return filter.isSpaceChar(c);
		return c == ' ' || c == '\n' || c == '\r' || c == '\t' || c == -1;
	} 
	public String next() {
		return String();
	} 
	public interface SpaceCharFilter {
		public boolean isSpaceChar(int ch);
	}
}
class OutputWriter {
	private final PrintWriter writer;
	public OutputWriter(OutputStream outputStream) {
		writer = new PrintWriter(new BufferedWriter(new OutputStreamWriter(outputStream)));
	}
	public OutputWriter(Writer writer) {
		this.writer = new PrintWriter(writer);
	}
	public void print(Object...objects) {
		for (int i = 0; i < objects.length; i++) {
			if (i != 0)
				writer.print(' ');
			writer.print(objects[i]);
		}
	}
	public void printLine(Object...objects) {
		print(objects);
		writer.println();
	}
	public void close() {
		writer.close();
	}
	public void flush() {
		writer.flush();
	}
 }
class IOUtils {
	public static int[] readIntArray(InputReader in, int size) {
		int[] array = new int[size];
		for (int i = 0; i < size; i++)
			array[i] = in.Int();
		return array;
	}
} 
