#include <bits/stdc++.h>
using namespace std;
int dx[] = {-1, 1, 0, 0};
int dy[] = {0, 0, -1, 1};
long long int sizes[100001];
long long int arr[100001];
bool ok = true;
long long int A[100001];
pair<long long int, long long int> B[100001];
long long int root(long long int i) {
  while (i != arr[i]) i = arr[i];
  return (i);
}
void Union(long long int i, long long int j) {
  long long int root_i = root(i), root_j = root(j);
  if (root_i == root_j) return;
  if (sizes[root_i] > sizes[root_j]) swap(root_i, root_j);
  sizes[root_j] += sizes[root_i];
  arr[root_i] = arr[root_j];
  return;
}
long long int Arr[100001];
bool solve(long long int n) {
  if (n == 1) return (true);
  set<long long int> st;
  for (long long int i = 0; i < n; i++) {
    long long int m = (Arr[i] + i) % n;
    if (m < 0) m += n;
    if (st.count(m)) return (false);
    st.insert(m);
  }
  return (true);
}
long long int power[11];
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  int h, w;
  cin >> h >> w;
  bool ans = true;
  vector<string> v;
  string s;
  for (int i = 0; i < h; i++) {
    cin >> s;
    v.push_back(s);
  }
  for (int i = 0; i < h; i++) {
    for (int j = 0; j < w; j++) {
      if (v[i][j] == '.') continue;
      bool ok = false;
      for (int k = 0; k < 4; k++) {
        int x = i + dx[k], y = j + dy[k];
        if (x < 0 || y < 0 || x >= w || y >= h) continue;
        if (v[x][y] == '#') {
          ok = true;
          break;
        }
      }
      if (!ok) {
        ans = false;
        break;
      }
    }
    if (!ans) break;
  }
  cout << "Yes";
  return (0);
}
