#include <bits/stdc++.h>
using namespace std;
static long long imin = std::numeric_limits<long long>::min();
static long long imax = std::numeric_limits<long long>::max();
template <class T>
std::ostream& operator<<(std::ostream& os, std::vector<T>& vec) {
  std::size_t n = vec.size();
  if (n == 0) {
    return os;
  }
  for (int i = 0; i < n - 1; ++i) {
    os << vec[i] << " ";
  }
  os << vec[n - 1];
  os << std::endl;
  return os;
}
int main(int const argc, char const** argv) {
  long long H, W;
  cin >> H >> W;
  vector<vector<int>> s;
  s.resize(H);
  for (int i = 0; i < W; ++i) {
    s[i].resize(W);
  }
  for (int x = 0; x < H; ++x) {
    for (int y = 0; y < W; ++y) {
      char c;
      cin >> c;
      if (c == '#') {
        s[x][y] = 1;
      } else {
        s[x][y] = 0;
      }
    }
  }
  bool res = true;
  for (int x = 0; x < H; ++x) {
    for (int y = 0; y < W; ++y) {
      bool a = false, b = false, c = false, d = false;
      if (0 != x && s[x - 1][y] == 1) {
        a = true;
      }
      if (0 != y && s[x][y - 1] == 1) {
        b = true;
      }
      if (H - 1 != x && s[x + 1][y] == 1) {
        c = true;
      }
      if (W - 1 != y && s[x][y + 1] == 1) {
        d = true;
      }
      res = a || b || c || d;
    }
  }
  if (res) {
    cout << "Yes";
  } else {
    cout << "No";
  }
}
