#include <bits/stdc++.h>
using namespace std;
using ll = long long;
using P = pair<int, int>;
using Graph = vector<vector<int>>;
using M = map<int, int>;
using PQ = priority_queue<int>;
using PQG = priority_queue<int, vector<int>, greater<int>>;
const int INF = 1e9;
const int MOD = 1e9 + 7;
const ll LINF = 1e18;
int main() {
  int h, w;
  cin >> h >> w;
  char g[w + 1][h + 1];
  for (int i = 0; i < h; i++)
    for (int j = 0; j < w; j++) {
      cin >> g[i + 1][j + 1];
    }
  vector<P> dir = {{0, 1}, {0, -1}, {1, 0}, {-1, 0}};
  for (int i = 1; i < h; i++)
    for (int j = 1; j < w; j++) {
      if (g[i][j] != '#') continue;
      int ok = 0;
      for (auto v : dir) {
        if (g[i + v.first][j + v.second] == '#') {
          ok = 1;
          break;
        }
      }
      if (!ok) {
        cout << ("No") << endl;
        return 0;
      }
    }
  cout << ("Yes") << endl;
  return 0;
}
