#include <bits/stdc++.h>
using namespace std;
using ll = long long;
ll vx[8] = {-1, 0, 0, 1};
ll vy[8] = {0, 1, -1, 0};
bool isIn(ll x, ll y, ll h, ll w) {
  if (x >= 0 && y >= 0 && x < w && y < h)
    return true;
  else
    return false;
}
int main() {
  ll H, W;
  cin >> H >> W;
  vector<vector<char>> field(H, vector<char>(W));
  for (ll i = 0; i < H; i++) {
    for (ll j = 0; j < W; j++) {
      cin >> field[i][j];
    }
  }
  queue<pair<ll, ll>> que;
  ll count = 0;
  for (ll i = 0; i < H; i++) {
    for (ll j = 0; j < W; j++) {
      if (field[i][j] == '.') continue;
      bool flag = false;
      for (ll k = 0; k < 4; k++) {
        if (isIn(j + vx[k], i + vy[k], H, W) &&
            field[i + vy[k]][j + vx[k]] == '#')
          flag = true;
      }
      if (!flag) continue;
      que.push(make_pair(i, j));
      count++;
      while (!que.empty()) {
        pair<ll, ll> point = que.front();
        field[point.first][point.second] = '.';
        que.pop();
        for (ll k = 0; k < 4; k++) {
          if (isIn(point.second + vx[k], point.first + vy[k], H, W) &&
              field[point.first + vy[k]][point.second + vx[k]] == '#') {
            que.push(make_pair(point.first + vy[k], point.second + vx[k]));
          }
        }
      }
    }
  }
  for (ll i = 0; i < H; i++) {
    for (ll j = 0; j < W; j++) {
      if (field[i][j] == '#') {
        cout << "No" << endl;
        return 0;
      }
    }
  }
  cout << "Yes" << endl;
  return 0;
}
