import java.io.*;
import java.util.*;
public class Main {
static BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
static BufferedWriter out = new BufferedWriter(new OutputStreamWriter(System.out));
static int n,m;
static char[][] map;
static boolean[][] judge;
static int[] X = new int[]{0,0,-1,1};
static int[] Y = new int[]{1,-1,0,0};
public static void main(String[] args) throws IOException{
String[] str;
str = br.readLine().split(" ");
n = Integer.parseInt(str[0]);
m = Integer.parseInt(str[1]);
map = new char[n+1][m+1];
judge = new boolean[n+1][m+1];
for(int i = 1 ; i <= n ; i++){
String s;
s = br.readLine();
for(int j = 0 ; j < s.length() ; j++){
map[i][j+1] = s.charAt(j);
}
}
if(BFS()){
out.write("Yes");
}
else{
out.write("No");
}
out.flush();
out.close();
br.close();
}
private static boolean BFS(){
judge[1][1] = true;
Deque<Point> deque = new LinkedList<>();
Point start = new Point();
start.x = 1;
start.y = 1;
deque.offer(start);
while(!deque.isEmpty()){
Point p = deque.poll();
for(int i = 0 ; i < 4 ; i++){
int x = p.x + X[i];
int y = p.y + Y[i];
if(x >= 1 && x <= n && y >= 1 && y <= m && !judge[x][y] && map[x][y] != '#'){
Point new_point = new Point();
new_point.x = x;
new_point.y = y;
deque.offer(new_point);
judge[x][y] = true;
}
}
if(judge[n][m]){
return true;
}
}
return false;
}
}
class Point{
int x;
int y;
}
慢慢熟练使用BFS!