#include <iostream>
using namespace std;
#include<vector>
bool valid = false;
void dfs(vector<vector<char>>& grid,vector<vector<bool>>& visited,int i,int j,int row,int col){
        if(grid[i][j] == '#' || visited[i][j])
            return;
        if(i == row-1 && j == col-1 && grid[i][j] == '.'){
            valid = true;
            return;
        }
        visited[i][j] = true;
        vector<pair<int,int>> directions = {{-1,0},{1,0},{0,-1},{0,1}};
        for(auto dir:directions){
            if(i+dir.first >= 0 && i+dir.first < row && j+dir.second >= 0 && j+dir.second < col && grid[i+dir.first][j+dir.second] == '.'){
                dfs(grid,visited,i+dir.first,j+dir.second,row,col);
            }
        }
}
int main() {
        int row,col;
        cin >> row >> col;
        vector<vector<char>> grid(row,vector<char>(col));
        for(int i=0;i<row;i++)
            for(int j=0;j<col;j++)
                cin >> grid[i][j];
        vector<vector<bool>> visited(row,vector<bool>(col,false));
        dfs(grid,visited,0,0,row,col);
        if(valid)
            cout << "Yes" << endl;
        else
            cout << "No" << endl;
}