include<iostream>
#include<string>
#include<vector>
#include<map>
#include<cmath>
#include<algorithm>
#include<functional>
typedef long long ll;
#define INF 99999999
int main() {
	int h = 0, w = 0;
	char can[50][50] = {};
	bool flug = true;//true yes false no
	std::cin >> h >> w;
	for (int i = 0; i < h; i++) {
		for (int j = 0; j < w; j++) {
			std::cin >> can[i][j];
		}
	}
	if (can[0][0] == '#' && can[0][1] == '.' && can[1][0] == '.') {
		flug = false;
	}
	if (can[0][w-1] == '#' && can[0][w-2] == '.' && can[1][w-1] == '.') {
		flug = false;
	}
	if (can[h-1][0] == '#' && can[h-1][1] == '.' && can[h-2][0] == '.') {
		flug = false;
	}
	if (can[h-1][w-1] == '#' && can[h-1][w-2] == '.' && can[h-2][w-1] == '.') {
		flug = false;
	}
	for (int i = 1; i < w; i++) {
		if (can[0][i] == '#' && can[0][i + 1] == '.' && can[0][i - 1] == '.' && can[1][i] == '.') {
			flug = false;
		}
	}
	for (int i = 1; i < w; i++) {
		if (can[h-1][i] == '#' && can[h-1][i + 1] == '.' && can[h-1][i - 1] == '.'&&can[h-2][i]=='.') {
			flug = false;
		}
	}
	for (int i = 1; i < h; i++) {
		if (can[i][0] == '#' && can[i-1][0] == '.' && can[i+1][0] == '.'&&can[i][1] == '.') {
			flug = false;
		}
	}
	for (int i = 1; i < h; i++) {
		if (can[i][w-1] == '#' && can[i - 1][w-1] == '.' && can[i + 1][w-1] == '.'&&can[i][w-2] == '.') {
			flug = false;
		}
	}
	for (int i = 1; i < h-1; i++) {
		for (int j = 1; j < w-1; j++) {
			if (can[i][j] == '#' && can[i - 1][j] == '.' && can[i + 1][j] == '.' && can[i][j + 1] == '.' && can[i][j - 1] == '.') {
				flug = false;
			}
		}
	}
	if (flug == true) {
		std::cout << "Yes" << std::endl;
	}
	else {
		std::cout << "No" << std::endl;
	}
	return 0;
}