#include <cstdio>
#include <cstdlib>
#include <iostream>
#include <cstring>
#include <vector>
#include <queue>
#include <stack>
#include <list>
#include <set>
#include <map>
#include <unordered_map>
#include <bitset>
#include <algorithm>
#include <cmath>
#include <locale>
using namespace std;
#define MS0(I) memset(I, 0, sizeof(I));
#define MS1(I) memset(I, -1, sizeof(I));
#define rep(i, n) for(int i = 0; i < (n); ++i)
#define rep1(i, s, n) for(int i = (s); i < (n); ++i)
#define per1(i, a, b) for(int i = a; i >= b; --i)
#define DRI(A) int A; scanf("%d", &A);
#define DRII(A, B) int A, B; scanf("%d %d", &A, &B);
#define DRIII(A, B, C) int A, B, C; scanf("%d %d %d", &A, &B, &C);
#define MP make_pair 
#define pb push_back
#define F first
#define S second
#define ALL(I) (I).begin(), (I).end()
typedef const void CV;
typedef long long LL;
typedef unsigned long long ULL;
typedef pair<int, int> PII;	
const int INF = (int)1e9;
const int mod = (int)1e9+7;
const int MAX = (int)5e5+5;
char st[MAX][MAX];
int rr[] = {1, 0, -1, 0};
int cc[] = {0, 1, 0, -1};
int main(void){
	DRII(n, m);
	rep1(i, 1, n+1) scanf("%s", st[i] + 1);
	rep1(i, 1, n+1) rep1(j, 1, m+1){
		if(st[i][j] == '#'){
			bool flag = 0;
			rep(k, 4){
				int r = rr[k] + i;
				int c = cc[k] + j;
				if(st[r][c] == '#'){
					flag = 1; break;
				}
			}
			if(!flag){
				puts("No"); return 0;
			}
		}
	}
	puts("Yes");
	return 0;
}
