#include <bits/stdc++.h>
using namespace std;
using pii = pair<int, int>;
template <class... T>
void input__(T &...a) {
  for (auto v : {&a...}) {
    cin >> *v;
  }
}
void output__() { cout << endl; }
template <class Head, class... T>
void output__(Head const &v, T const &...a) {
  if (sizeof...(a) == 0) {
    cout << v;
  } else {
    cout << v << " ";
  }
  output__(a...);
}
struct State {
  int x, y, l;
};
int main() {
  int ndir[4][2] = {{-1, 0}, {0, -1}, {1, 0}, {0, 1}};
  int h, w;
  input__(h, w);
  ;
  string field[(h)];
  for (int(i) = 0; (i) < (h); (i)++) cin >> field[i];
  ;
  queue<State> que;
  for (int(i) = 0; (i) < (h); (i)++) {
    for (int(j) = 0; (j) < (w); (j)++) {
      if (field[i][j] == '#') {
        que.push({j, i, 1});
        int max_length = -1;
        while (!que.empty()) {
          State top = que.front();
          que.pop();
          if (field[top.y][top.x] != '#') {
            continue;
          }
          field[top.y][top.x] = '.';
          if (max_length < top.l) {
            max_length = top.l;
          }
          for (auto d : (ndir)) {
            int nx = top.x + d[0];
            int ny = top.y + d[1];
            if (0 <= nx and nx < w and 0 <= ny and ny < h) {
              que.push({nx, ny, top.l + 1});
            }
          }
        }
        if (max_length <= 1) {
          output__("No");
          ;
          exit(1);
        }
      }
    }
  }
  output__("Yes");
  ;
}
