#include <bits/stdc++.h>
const int mod = (int)1e09 + 7;
int in(void) {
  int i;
  scanf("%d", &i);
  return i;
}
long long llin(void) {
  long long i;
  scanf("%lld", &i);
  return i;
}
double din(void) {
  double i;
  scanf("%lf", &i);
  return i;
}
void chin(char s[]) { scanf("%s", s); }
void print(int a) { printf("%d\n", a); }
void llprint(long long a) { printf("%lld\n", a); }
void dprint(double a) { printf("%.10f\n", a); }
void print2(int a, int b) { printf("%d %d\n", a, b); }
long long max(long long a, long long b) { return a > b ? a : b; }
long long min(long long a, long long b) { return a < b ? a : b; }
double dmax(double a, double b) { return a > b ? a : b; }
int cmp(const void *a, const void *b) { return *(int *)a - *(int *)b; }
int cmp_r(const void *a, const void *b) { return *(int *)b - *(int *)a; }
int char_cmp(const void *a, const void *b) {
  return strcmp((char *)a, (char *)b);
}
int char_cmp_r(const void *a, const void *b) {
  return strcmp((char *)b, (char *)a);
}
void swap(int *a, int *b) {
  int t = *a;
  *a = *b;
  *b = t;
}
long long gcd(long long x, long long y) { return x % y ? gcd(y, x % y) : y; }
long long lcm(long long x, long long y) { return x / gcd(x, y) * y; }
int dx[] = {0, 0, 1, -1};
int dy[] = {1, -1, 0, 0};
int main(void) {
  int h = in(), w = in(), i, j, k, f = 1;
  char s[52][55];
  for (i = 0; i < h; i++) {
    for (j = 0; j < w; j++) scanf("%c", &s[i + 1][j + 1]);
    getchar();
  }
  for (i = 0; i < h; i++)
    for (j = 0; j < w; j++) {
      int hh = i + 1;
      int ww = j + 1;
      if (s[hh][ww] == '#') {
        for (k = 0; k < 4; k++) {
          if (s[hh + dy[k]][ww + dx[k]] == '#') break;
        }
        if (k == 4) f = 0;
      }
    }
  puts(f ? "Yes" : "No");
  return 0;
}
