import std.algorithm, std.container, std.conv, std.math, std.range, std.typecons, std.stdio, std.string;

auto rdsp(){return readln.splitter;}
void pick(R,T)(ref R r,ref T t){t=r.front.to!T;r.popFront;}
void readV(T...)(ref T t){auto r=rdsp;foreach(ref v;t)pick(r,v);}
void readC(T...)(size_t n,ref T t){foreach(ref v;t)v=new typeof(v)(n);foreach(i;0..n){auto r=rdsp;foreach(ref v;t)pick(r,v[i]);}}

void main()
{
  int h, w; readV(h, w);
  string[] s; readC(h, s);

  auto b = new int[][](h+2, w+2);
  foreach (i; 0..h)
    foreach (j; 0..w)
      b[i+1][j+1] = s[i][j] == '#';

  foreach (i; 1..h+1)
    foreach (j; 1..w+1) {
      if (!b[i][j]) continue;
      auto r = b[i-1][j]+b[i+1][j]+b[i][j-1]+b[i][j+1];
      if (r == 0) {
        writeln("No");
        return;
      }
    }

  writeln("Yes");
}
