#include <bits/stdc++.h>
using namespace std;
using vi = vector<int>;
using vll = vector<long long>;
long long mod = 1e9 + 7;
using namespace std;
using Graph = vector<vector<int>>;
int cnt_digit(long long N) {
  int digit = 0;
  while (N > 0) {
    N /= 10;
    digit++;
  }
  return digit;
}
long long gcd(long long a, long long b) {
  if (b == 0) {
    return a;
  } else {
    return gcd(b, a % b);
  }
}
long long lcm(long long a, long long b) {
  long long g = gcd(a, b);
  return a / g * b;
}
struct union_find {
  vector<int> par, r;
  union_find(int n) {
    par.resize(n);
    r.resize(n);
    init(n);
  }
  void init(int n) {
    for (int i = 0; i < n; i++) par[i] = i;
    for (int i = 0; i < n; i++) r[i] = 0;
  }
  int find(int x) {
    if (par[x] == x)
      return x;
    else
      return find(par[x]);
  }
  void unite(int x, int y) {
    x = find(x);
    y = find(y);
    if (r[x] < r[y]) {
      par[x] = y;
    } else {
      par[y] = x;
      if (r[x] == r[y]) {
        r[x]++;
      }
    }
  }
};
int main() {
  cin.tie(0);
  ios::sync_with_stdio(false);
  int h, w;
  cin >> h >> w;
  ;
  vector<vector<char>> data(h + 2, vector<char>(w + 2));
  for (int i = 1; i < h + 1; ++i) {
    for (int j = 1; j < w + 1; ++j) {
      cin >> data[i][j];
    }
  }
  bool ans = true;
  for (int i = 1; i < h + 1; ++i) {
    for (int j = 1; j < w + 1; ++j) {
      if (data[i - 1][j] != '#' && data[i + 1][j] != '#' &&
          data[i][j - 1] != '#' && data[i][j + 1] != '#') {
        ans = false;
      }
    }
  }
  if (ans)
    cout << "Yes" << endl;
  else
    cout << "No" << endl;
}
