#include <bits/stdc++.h>
int w, h;
uint64_t grid[64];
void init() {
  char buf[64], *p;
  int i, j;
  fgets(buf, 62, stdin);
  if (p = strchr(buf, '\n')) *p = 0;
  if (p = strchr(buf, ' ')) {
    *p++ = 0;
    w = atoi(p);
  }
  h = atoi(buf);
  memset(grid, 0, sizeof(grid));
  for (i = 0; i < h; ++i) {
    fgets(buf, 62, stdin);
    for (j = 0; j < w; ++j) {
      grid[i] |= !!(buf[j] == '#') << j;
    }
  }
}
int check_row(int i) {
  uint64_t u = 1 < i ? grid[i - 1] & grid[i] : 0;
  uint64_t d = i < h ? grid[i + 1] & grid[i] : 0;
  uint64_t l = grid[i] & (grid[i] >> 1);
  uint64_t r = grid[i] & (grid[i] << 1);
  uint64_t s = u | d | l | r;
  return (grid[i] & s) == grid[i];
}
int check() {
  int i;
  for (i = 1; i < h - 1; ++i)
    if (!check_row(i)) return 0;
  return 1;
}
int main() {
  init();
  puts(check() ? "Yes" : "No");
}
