#include<bits/stdc++.h>
using namespace std;
const int N = 5100;
int n, m;
struct node {
int x, y;
} p[N * N];
//queue<pair<int,int> >q;
//pair<int,int> p[N*N];
int head, tail;
char mp[N][N];
bool mk[N][N];
bool flag;
int dx[] = {0, -1, 0, 1}, dy[] = {-1, 0, 1, 0};
int main() {
cin >> n >> m;
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= m; j++) {
cin >> mp[i][j];
}
}
head = tail = 1;
p[tail].x = 1, p[tail].y = 1;
tail++;
mk[p[head].x][p[head].y] = true;
while (head<tail) {
for (int i = 0; i < 4; i++) {
int tx = p[head].x + dx[i];
int ty = p[head].y + dy[i];
if (tx < 1 || tx > m || ty < 1 || ty > n) {
continue;
}
if (mp[tx][ty] != '#' && mk[tx][ty] == false) {
p[tail].x = tx, p[tail].y = ty ;
tail++;
mk[tx][ty] = true;
}
if (tx == m && ty == n) {
flag = true;
break;
}
}
if (flag) {
break;
}
head++;
}
if(flag)cout<<"Yes";
else cout<<"No";
return 0;
}