#include <bits/stdc++.h>
using namespace std;
constexpr int MAX_H = 50;
constexpr int MAX_W = 50;
int H, W;
string grid[MAX_H];
bool reached[MAX_H][MAX_W];
constexpr int dh[]{-1, 0, 0, +1};
constexpr int dw[]{0, -1, +1, 0};
void draw(int h, int w) {
  for (int i{}; i < sizeof(dh) / sizeof(int); ++i) {
    int nh = h + dh[i];
    if (nh < 0 || nh >= H) continue;
    int nw = w + dw[i];
    if (nw < 0 || nw >= W) continue;
    if (grid[nh][nw] == '#') {
      reached[h][w] = reached[nh][nw] = true;
    }
  }
}
int main() {
  cin >> H >> W;
  for (int h{}; h < H; ++h) {
    cin >> grid[h];
  }
  for (int h{}; h < H; ++h) {
    for (int w{}; w < W; ++w) {
      if (grid[h][w] == '.') {
        reached[h][w] = true;
        continue;
      }
      draw(h, w);
    }
  }
  bool judge{true};
  for (int h{}; h < H; ++h) {
    for (int w; w < W; ++w) {
      if (!reached[h][w]) {
        judge = false;
        break;
      }
    }
  }
  printf("%s\n", judge ? "Yes" : "No");
  return 0;
}
