
import std.algorithm;
import std.conv;
import std.stdio;
import std.string;

void main()
{
	auto hw = readln.split.map!( to!byte );
	auto s = new string[ hw[ 0 ] ];
	foreach( ref sl; s )
	{
		sl = readln.strip;
	}
	
	writeln( solve( hw[ 0 ], hw[ 1 ], s ) );
}

string solve( in byte h, in byte w, in string[] s )
{
	foreach( y; 0 .. h )
	{
		foreach( x; 0 .. w )
		{
			if( s[ y ][ x ] == '#' )
			{
				if( 0 <= y - 1 && s[ y - 1 ][ x ] == '#' ) continue;
				if( y + 1 < h && s[ y + 1 ][ x ] == '#' ) continue;
				if( 0 <= x - 1 && s[ y ][ x - 1 ] == '#' ) continue;
				if( x + 1 < w && s[ y ][ x + 1 ] == '#' ) continue;
				return "No";
			}
		}
	}
	
	return "Yes";
}

unittest
{
	assert( solve( 3, 3, [ ".#.", "###", ".#." ] ) == "Yes" );
	assert( solve( 5, 5, [ "#.#.#", ".#.#.", "#.#.#", ".#.#.", "#.#.#" ] ) == "No" );
	assert( solve( 11, 11, [ "...#####...", ".##.....##.", "#..##.##..#", "#..##.##..#", "#.........#", "#...###...#", ".#########.", ".#.#.#.#.#.", "##.#.#.#.##", "..##.#.##..", ".##..#..##." ] ) == "Yes" );
	assert( solve( 4, 3, [ "##.", ".##", "##.", ".##" ] ) == "Yes" );
}
