#include <bits/stdc++.h>
using namespace std;

bool check(vector<vector<char>> s, int y, int x, int H, int W){
    vector<int> dx = {0, 1, 0, -1};
    vector<int> dy = {1, 0, -1, 0};
    for (int i = 0; i<4; i++){
        if (x+dx.at(i)>=0 && x+dx.at(i)<W && y+dy.at(i)>=0 && y+dy.at(i)<H){
            if (s.at(y + dy.at(i)).at(x + dx.at(i)) == '#'){
                return true;
            }
        }
    }
    return false;
}

int main(){
    int H, W;
    cin >> H >> W;
    vector<vector<char>> s(H, vector<char>(W));
    
    for (int i = 0; i<H; i++){
        for (int j=0; j<W; j++){
            cin >> s.at(i).at(j);
        }
    }
    
    for (int i = 0; i<H; i++){
        for (int j=0; j<W; j++){
            if (s.at(i).at(j)=='#'){
                if (!check(s, i, j, H, W)){
                    cout << "No" << endl;
                    return 0;
                }
            }
        }
    }
    
    cout << "Yes" << endl;
   
}#include <bits/stdc++.h>
using namespace std;

bool check(vector<vector<char>> s, int y, int x, int H, int W){
    vector<int> dx = {0, 1, 0, -1};
    vector<int> dy = {1, 0, -1, 0};
    for (int i = 0; i<4; i++){
        if (x+dx.at(i)>=0 && x+dx.at(i)<W && y+dy.at(i)>=0 && y+dy.at(i)<H){
            if (s.at(y + dy.at(i)).at(x + dx.at(i)) == '#'){
                return true;
            }
        }
    }
    return false;
}

int main(){
    int H, W;
    cin >> H >> W;
    vector<vector<char>> s(H, vector<char>(W));
    
    for (int i = 0; i<H; i++){
        for (int j=0; j<W; j++){
            cin >> s.at(i).at(j);
        }
    }
    
    for (int i = 0; i<H; i++){
        for (int j=0; j<W; j++){
            if (s.at(i).at(j)=='#'){
                if (!check(s, i, j, H, W)){
                    cout << "No" << endl;
                    return 0;
                }
            }
        }
    }
    
    cout << "Yes" << endl;
   
}