#include <bits/stdc++.h>
template <typename T>
bool chmax(T &a, const T &b) {
  if (a <= b) {
    a = b;
    return (true);
  } else {
    return (false);
  }
}
template <typename T>
bool chmin(T &a, const T &b) {
  if (a >= b) {
    a = b;
    return (true);
  } else {
    return (false);
  }
}
using namespace std;
using ll = long long;
using ull = unsigned long long;
using Pll = pair<ll, ll>;
using Pull = pair<ull, ull>;
template <typename T>
T gcd(const T a, const T b) {
  return (b ? gcd(b, a % b) : a);
}
constexpr ll MOD = 1000000007LL;
template <typename T = ll>
class UnionFind {
 public:
  UnionFind(T n) {
    for (int i = 0; i < (int)(n); ++i) {
      par.resize(n);
      siz.resize(n);
      par[i] = i;
      siz[i] = 1;
    }
  }
  T find(T x) {
    if (x == par[x])
      return (x);
    else
      return (par[x] = find(par[x]));
  }
  void unite(T x, T y) {
    T xx = find(x);
    T yy = find(y);
    if (xx == yy) return;
    if (siz[xx] <= siz[yy]) swap(xx, yy);
    par[yy] = xx;
    siz[xx] += siz[yy];
  }

 private:
  vector<T> par, siz;
};
template <typename T = ll>
T power(T a, T b, T m = MOD) {
  T res = 1;
  while (b > 0) {
    if (b & 1) res = res * a % m;
    a = a * a % m;
    b >>= 1;
  }
  return (res);
}
void replace(string &s, string t, string r) {
  string::size_type p = 0;
  while ((p = s.find(t, p)) != string::npos) {
    s.replace(p, t.length(), r);
    p += r.length();
  }
}
int main() {
  int H, W;
  cin >> H >> W;
  vector<bitset<52>> vb(H + 2);
  for (int i = 1; i <= (int)(H); ++i) {
    for (int j = 1; j <= (int)(W); ++j) {
      char tmp;
      cin >> tmp;
      vb[i][j] = (tmp == '#' ? 1 : 0);
    }
  }
  vector<bitset<52>> vvb(H + 2, 0);
  for (int i = 1; i <= (int)(H); ++i) {
    for (int j = 1; j <= (int)(W); ++j) {
      if (vb[i][j] == 0)
        vvb[i][j] = true;
      else {
        if ((vb[i - 1][j]) || (vb[i + 1][j]) || (vb[i][j - 1]) ||
            (vb[i][j + 1])) {
          vvb[i][j] = true;
        }
      }
    }
  }
  bool ok = true;
  for (int i = 1; i <= (int)(H); ++i) {
    if (vvb[i].count() < H) {
      ok = false;
      break;
    }
  }
  cout << (ok ? "Yes" : "No") << endl;
  return (0);
}
