#include<iostream>
#include<vector>
#include<string>
#include<queue>

using namespace std;

int H, W;
vector<vector<char>> s(H, vector<char>(W));
bool flag = true;

int a(4) = { 0, 1, 0, -1}
int	b(4) = { 1, 0, -1, 0}

int lake(int A, B,C){
	if (A < 0 || A >= H || B < 0 || B >= H) {
		return 0;
	}
	else if (C == 0) {
		for (int i = 0; i < 4; i++) {
			if (!(lake(A + a[i], B + b[i], C+1))) return flag = false;
		}
	}
	if (s.[A][B] =='#') {
		del(A, B);
		for (int i = 0; i < 4; i++) {
			lake(A + a[i], B + b[i],C+1);
		}
	}
}

int del(int i, int j) {
	s[i][j] = '.';
}

int main() {
	cin >> H>> W;
	for (int i = 0; i < H; i++) {
		for (int j = 0; j < W; j++) {
			cin >> s[i][j];
		}
	}
	for (int i = 0; i < H; i++) {
		for (int j = 0; j < W; j++) {
			if (s.[i][j] == '#') lake(i, j, 0);
		}
	}
	if (flag) cout << "Yes" << endl;
	else cout << "No" << endl;
}