#include <iostream>
#include <string>
#include <algorithm>
#include <numeric>
#include <cmath>
#include <vector>
#include <map>
#include <set>
#include <queue>
#include <cstdlib>

using namespace std;
//DP用
template<class T> inline bool chmin(T& a, T b) {
    if(a > b) {
        a = b;
        return true;
    }
    return false;
}
template<class T> inline bool chmax(T& a, T b) {
    if(a < b) {
        a = b;
        return true;
    }
    return false;
}

//a^n mod を計算する関数
long long modpow(long long a,long long n,long long mod) {
    long long res = 1;
    while(n > 0) {
        if(n % 2 == 1) {
            res = res * a % mod;
        }
        a = a * a % mod;
        n >>= 1;
    }
    return res;
}

//a^(-1) mod すなわちaの逆元を返す関数
long long modinv(long long a,long long mod) {
    return modpow(a,mod-2,mod);
}

//最大公約数をを返す関数
long long gcd (long long a,long long b) {
    if(a % b == 0) {
        return b;
    }else {
        return (gcd(b,a%b));
    }
}

const long long INF = 1LL << 60;
const long long P = 1000000007;

//nCkを求める関数
long long conbi (long long n,long long k) {
    long long res = 1;
    long long inv;
    for(long long i = n-k+1; i <= n; i++) {
        res *= i;
        res %= P;
    }
    for(long long i = 1; i <= k; i++) {
        inv = modinv(i,P);
        res *= inv;
        res %= P;
    }
    return res;
}

int main() {
    int h,w;
    cin >> h >> w;
    char s[h][w];
    for(int i = 0; i < h; i++) {
        for(int j = 0; j < w; j++) {
            cin >> s[i][j];
        }
    }
    bool flag = true;
    for(int i = 0; i < h; i++) {
        for(int j = 0; j < w; j++) {
            if(s[i][j] == '#') {
                if(j > 0 && j < w-1 && i > 0 && i < h-1) {
                    if(s[i][j-1] != '#' && s[i][j+1] != '#' && s[i-1][j] != '#' && s[i+1][j] != '#') {
                        flag = false;
                        break;
                    }
                }
            }
        }
    }
    
    if(flag == true) {
        for(int i = 1; i < h-1; i++) {
            if(s[i][0] == '#') {
                if(s[i][1] != '#' && s[i-1][0] != '#' && s[i+1][0] != '#') {
                    flag = false;
                    break;
                }
            }
            if(s[i][w-1] == '#') {
                if(s[i][w-2] != '#' && s[i-1][w-1] != '#' && s[i+1][w-1] != '#') {
                    flag = false;
                    break;
                }
            }
        }
    }
    if(flag == true) {
        for(int j = 1; j < w-1; j++) {
            if(s[0][j] == '#') {
                if(s[0][j+1] != '#' && s[0][j-1] != '#' && s[1][j] != '#') {
                    flag = false;
                    break;
                }
            }
            if(s[h-1][j] == '#') {
                if(s[h-1][j+1] != '#' && s[h-1][j-1] != '#' && s[h-2][j] != '#') {
                    flag = false;
                    break;
                }
            }
        }
    }
    if(s[0][0] == '#') {
        if(s[0][1] != '#' && s[1][0] != '#') {
            flag = false;
        }
    }
    if(s[h-1][0] == '#') {
        if(s[h-2][0] != '#' && s[h-1][1] != '#') {
            flag = false;
        }
    }
    if(s[0][w-1] == '#') {
        if(s[0][w-2] != '#' && s[1][w-1] != '#') {
            flag = false;
        }
    }
    if(s[h-1][w-1] == '#') {
        if(s[h-1][w-2] != '#' && s[h-2][w-1] != '#') {
            flag = false;
        }
    }
    if(flag == true) {
        cout << "Yes";
    }else {
        cout << "No";
    }
    return 0;
}


Measured memory_bytes: 256