#include <bits/stdc++.h>
using namespace std;
const int INF = 1001001001;
const long long LINF = 1e18;
const long long mod = 1e9 + 7;
template <typename T>
T gcd(T a, T b) {
  if (a < b) gcd(b, a);
  T r;
  while ((r = a % b)) {
    a = b;
    b = r;
  }
  return b;
}
bool isValidIndex(long long r, long long c, long long H, long long W) {
  return !(r < 0 || r >= H || c < 0 || c >= W);
}
void paint(long long r, long long c, long long H, long long W,
           vector<vector<char>> ss) {
  if (!isValidIndex(r, c, H, W) || ss[r][c] == 'c')
    return;
  else if (ss[r][c] == '#') {
    for (long long dx = -1; dx <= 1; dx++) {
      for (long long dy = -1; dy <= 1; dy++) {
        if (dx == 0 && dy == 0) continue;
        long long nr = r + dy;
        long long nc = c + dx;
        if (isValidIndex(nr, nc, H, W) &&
            (ss[nr][nc] == 'c' || ss[nr][nc] == '#')) {
          ss[r][c] = 'c';
          return;
        }
      }
    }
  }
}
int main() {
  long long H, W, idx = 0;
  cin >> H >> W;
  char s;
  vector<vector<char>> ss(H, vector<char>(W, ' '));
  while (cin >> s) {
    long long r = idx / W;
    long long c = idx % W;
    ss[r][c] = s;
  }
  for (long long r = 0; r < H; r++) {
    for (long long c = 0; c < W; c++) {
      paint(r, c, H, W, ss);
    }
  }
  for (long long r = 0; r < H; r++) {
    for (long long c = 0; c < W; c++) {
      if (ss[r][c] == '#') {
        cout << "No" << endl;
        return 0;
      }
    }
  }
  cout << "Yes" << endl;
  return 0;
}
