#include <bits/stdc++.h>
using namespace std;
const long mod = 1000000007;
using namespace std;
int main() {
  int H, W;
  cin >> H >> W;
  if (H == 1 && W == 1) {
    char c;
    cin >> c;
    if (c == '#')
      cout << "No" << endl;
    else
      cout << "Yes" << endl;
    return 0;
  }
  vector<string> vec(W);
  vector<char> cha(H);
  if (W > 1) {
    for (int i = 0; i < H; i++) {
      cin >> vec.at(i);
    }
  } else {
    for (int i = 0; i < H; i++) {
      cin >> cha.at(i);
    }
  }
  if (H > 1 && W > 1) {
    for (int ia = 0; ia < H; ia++) {
      for (int ib = 0; ib < W; ib++) {
        if (vec.at(ia).at(ib) == '#') {
          if (ia == 0 && ib == 0) {
            if (vec.at(1).at(0) == '.' && vec.at(0).at(1) == '.') {
              cout << "No" << endl;
              return 0;
            }
          } else if (ia == H - 1 && ib == 0) {
            if (vec.at(H - 1).at(1) == '.' && vec.at(H - 2).at(0) == '.') {
              cout << "No" << endl;
              return 0;
            }
          } else if (ia == 0 && ib == W - 1) {
            if (vec.at(0).at(W - 2) == '.' && vec.at(1).at(W - 1) == '.') {
              cout << "No" << endl;
              return 0;
            }
          } else if (ia == H - 1 && ib == W - 1) {
            if (vec.at(H - 1).at(W - 2) == '.' &&
                vec.at(H - 2).at(W - 1) == '.') {
              cout << "No" << endl;
              return 0;
            }
          } else if (ia == 0) {
            if (vec.at(0).at(ib - 1) == '.' && vec.at(1).at(ib) == '.' &&
                vec.at(0).at(ib + 1) == '.') {
              cout << "No" << endl;
              return 0;
            }
          } else if (ia == H - 1) {
            if (vec.at(H - 1).at(ib - 1) == '.' &&
                vec.at(H - 2).at(ib) == '.' &&
                vec.at(H - 1).at(ib + 1) == '.') {
              cout << "No" << endl;
              return 0;
            }
          } else if (ib == 0) {
            if (vec.at(ia - 1).at(0) == '.' && vec.at(ia).at(1) == '.' &&
                vec.at(ia + 1).at(0) == '.') {
              cout << "No" << endl;
              return 0;
            }
          } else if (ib == W - 1) {
            if (vec.at(ia - 1).at(W - 1) == '.' &&
                vec.at(ia).at(W - 2) == '.' &&
                vec.at(ia + 1).at(W - 1) == '.') {
              cout << "No" << endl;
              return 0;
            }
          } else {
            if (vec.at(ia - 1).at(ib) == '.' && vec.at(ia + 1).at(ib) == '.' &&
                vec.at(ia).at(ib - 1) == '.' && vec.at(ia).at(ib + 1) == '.') {
              cout << "No" << endl;
              return 0;
            }
          }
        }
      }
    }
  } else {
    if (H > 1) {
      for (int i = 0; i < H; i++) {
        if (cha.at(i) == '#') {
          if (i == 0) {
            if (cha.at(1) == '.') {
              cout << "No" << endl;
              return 0;
            }
          }
          if (i == H - 1) {
            if (cha.at(H - 2) == '.') {
              cout << "No" << endl;
              return 0;
            }
          } else {
            if (cha.at(i - 1) == '.' && cha.at(i + 1) == '.') {
              cout << "No" << endl;
              return 0;
            }
          }
        }
      }
    } else if (W > 1) {
      for (int i = 0; i < W; i++) {
        if (vec.at(0).at(i) == '#') {
          if (i == 0) {
            if (vec.at(0).at(1) == '.') {
              cout << "No" << endl;
              return 0;
            }
          } else if (i == W - 1) {
            if (vec.at(0).at(W - 2) == '.') {
              cout << "No" << endl;
              return 0;
            }
          } else {
            if (vec.at(0).at(i - 1) == '.' && vec.at(0).at(i + 1) == '.') {
              cout << "No" << endl;
              return 0;
            }
          }
        }
      }
    }
  }
  cout << "Yes" << endl;
}
