#include <bits/stdc++.h>
using namespace std;
struct edge {
  long long to;
  long long cost;
};
constexpr double PI = 3.14159265358979323846;
constexpr long long INF = 1 << 15;
constexpr long long MOD = (long long)1e9 + 7;
constexpr double EPS = 1e-7;
constexpr int dy[4] = {0, 1, 0, -1};
constexpr int dx[4] = {1, 0, -1, 0};
template <typename T>
istream& operator>>(istream& is, vector<T>& vec) {
  for (T& x : vec) is >> x;
  return is;
}
template <typename T>
ostream& operator<<(ostream& os, vector<T>& vec) {
  for (T& x : vec) os << x << " ";
  return os;
}
int main(void) {
  int H, W;
  cin >> H >> W;
  vector<vector<char> > s(H, vector<char>(W));
  for (long long i = (long long)0; i < (long long)H; ++i) {
    for (long long j = (long long)0; j < (long long)W; ++j) {
      cin >> s[i][j];
    }
  }
  for (long long i = (long long)0; i < (long long)H; ++i) {
    for (long long j = (long long)0; j < (long long)W; ++j) {
      if (s[i][j] == '#') {
        bool ok = false;
        for (long long k = (long long)0; k < (long long)4; ++k) {
          if (j + dx[k] < 0 || j + dx[k] >= H || i + dy[k] < 0 ||
              i + dy[k] >= W)
            continue;
          if (s[i + dy[k]][j + dx[k]] == '#') ok = true;
        }
        if (!ok) {
          cout << "No" << endl;
          return 0;
        }
      }
    }
  }
  cout << "Yes" << endl;
  return 0;
}
