#include "bits/stdc++.h" using namespace std; #define FOR(i,j,k) for(int (i)=(j);(i)<(int)(k);++(i)) #define rep(i,j) FOR(i,0,j) #define each(x,y) for(auto &(x):(y)) #define mp make_pair #define all(x) (x).begin(),(x).end() #define debug(x) cout<<#x<<": "<<(x)< pii; typedef vector vi; typedef vector vll; const int DY[] = {-1,0,1,0,-1,-1,1,1}; const int DX[] = {0,1,0,-1,-1,1,-1,1}; char A[110][110]; int vis[110][110], N, M, cnt[110][110]; bool f(){ queue q; q.push(mp(0, 0)); while(sz(q)){ int y, x; tie(y, x) = q.front(); q.pop(); if(vis[y][x]++)continue; int ny, nx; rep(i, 4){ ny = y + DY[i], nx = x + DX[i]; if(ny >= 0 && nx >= 0 && ny < N&&nx < M && A[ny][nx]=='#' && !vis[ny][nx]){ q.push(mp(ny, nx)); } } rep(i, 8){ ny = y + DY[i], nx = x + DX[i]; if(ny >= 0 && nx >= 0 && ny < N&&nx < M && A[ny][nx] == '.'){ vis[ny][nx] = 1; cnt[ny][nx]++; } } } rep(i, N)rep(j, M)if(A[i][j] == '.' && !vis[i][j])return 0; int l = 0, r = 0; rep(i, N)rep(j, M)if(A[i][j]=='.'){ if(cnt[i][j] == 1)r++; if(cnt[i][j] >= 4)l++; } return (l == 4 && r == 0) || (l == 5 && r == 1); } int main(){ MEM(A, '#'); cin >> N >> M; rep(i, N){ scanf("%s", A[i+1] + 1); A[i+1][M+1] = '#'; } N += 2; M += 2; puts(f() ? "YES" : "NO"); }