#include <bits/stdc++.h>
using namespace std;
using ll = long long;
using GraphI = vector<vector<int>>;
using GraphC = vector<vector<char>>;
using pint = pair<int, int>;
int main() {
  int H, W;
  cin >> H >> W;
  GraphC g(H, vector<char>(W));
  vector<pint> blacks;
  for (int y = (0); y < (int)(H); y++) {
    for (int x = (0); x < (int)(W); x++) {
      cin >> g[y][x];
      if (g[y][x] == '#') blacks.push_back(pint(y, x));
    }
  }
  int dy[4] = {-1, 0, 1, 0};
  int dx[4] = {0, 1, 0, -1};
  vector<vector<bool>> seen(H, vector<bool>(W, false));
  for (int i = (0); i < (int)(blacks.size()); i++) {
    auto now = blacks[i];
    int y = now.first, x = now.second;
    for (int i = (0); i < (int)(4); i++) {
      int ny = y + dy[i];
      int nx = y + dx[i];
      if (ny < 0 || ny >= H || nx < 0 || nx >= W) continue;
      if (g[ny][nx] == '.') continue;
      if (g[y][x] != g[ny][nx]) continue;
      if (seen[ny][nx]) continue;
      seen[ny][nx] = true;
    }
  }
  int cnt = 0;
  for (int y = (0); y < (int)(H); y++)
    for (int x = (0); x < (int)(W); x++)
      if (seen[y][x]) cnt++;
  if (cnt == blacks.size())
    cout << "Yes" << endl;
  else
    cout << "No" << endl;
  return 0;
}
