#include <bits/stdc++.h>
using namespace std;
template <class T>
inline int out(const T &t) {
  print(t);
  putchar('\n');
  return 0;
}
template <class T>
inline T gcd(T a, T b) {
  if (b == 0) return a;
  return (gcd(b, a % b));
}
template <class T>
inline T lcm(T a, T b) {
  return a / gcd(a, b) * b;
}
const long long INF = 1e18;
vector<long long> dp;
const string YES = "Yes";
const string NO = "No";
const long long dx[8] = {1, 0, -1, 0, 1, -1, -1, 1};
const long long dy[8] = {0, 1, 0, -1, 1, 1, -1, -1};
bool check(long long H, long long W, std::vector<std::string> s, long long i,
           long long j) {
  for (long long k = 0; k < 4; k++) {
    if (i + dy[k] < 0 || i + dy[k] >= H || j + dx[k] < 0 || j + dx[k] >= W)
      continue;
    if (s[i + dy[k]][j + dx[k]] == '#') {
      return true;
    }
  }
  return false;
}
void solve(long long H, long long W, std::vector<std::string> s) {
  bool f = true;
  for (long long i = 0; i < H; i++) {
    for (long long j = 0; j < W; j++) {
      if (s[i][j] == '.') continue;
      f = check(H, W, s, i, j);
      if (f == true) continue;
      if (f == false) {
        cout << (f ? YES : NO) << "\n";
        ;
        return;
      }
    }
  }
  cout << (f ? YES : NO) << "\n";
  ;
  return;
}
int main() {
  long long H;
  scanf("%lld", &H);
  long long W;
  scanf("%lld", &W);
  std::vector<std::string> s(W);
  for (int i = 0; i < H; i++) {
    std::cin >> s[i];
  }
  solve(H, W, std::move(s));
  return 0;
}
