#include <iostream>
#include <vector>
using namespace std;
//深度优先搜索算法对(1,1)的邻近格子进行染色(矩阵值置为2)
void dfs(int i, int j, vector<vector<int>>& v){
int n = v.size();
int m = v[0].size();
v[i][j] = 2;
if(i >= 1 && v[i - 1][j] == 0){
v[i - 1][j] = 2;
dfs(i - 1, j, v);
}
if(i < n - 1 && v[i + 1][j] == 0){
v[i + 1][j] = 2;
dfs(i + 1, j, v);
}
if(j >= 1 && v[i][j - 1] == 0){
v[i][j - 1] = 2;
dfs(i, j - 1, v);
}
if(j < m - 1 && v[i][j + 1] == 0){
v[i][j + 1] = 2;
dfs(i, j + 1, v);
}
}
int main() {
//输入数据
int n, m;
cin >> n >> m;
vector<vector<int>> v(n,vector<int>(m, 0));
for(int i = 0; i < n; i++){
for(int j = 0; j < m; j++){
char tmp;
cin >> tmp;
if(tmp == '#'){
v[i][j] = 1;
}
}
}
dfs(0, 0, v);//深度优先搜索染色
//检查v[n - 1][m - 1]的值输出结果
if(v[n - 1][m - 1] == 2){
cout << "Yes" << endl;
}
else{
cout << "No" << endl;
}
return 0;
}
// 64 位输出请用 printf("%lld")