#include <bits/stdc++.h>
using namespace std;

using str = string;
using ss = stringstream;

str a[60];

#define fi first
#define se second

#define DIRMAX 4
pair<int,int> dir[4]=
{
    { 0,-1},
    {-1, 0},
    { 1, 0},
    { 0, 1},
};

int main()
{
    cin.tie(0);
    ios::sync_with_stdio(0);

    int h,w;cin>>h>>w;

    ss maketop;
    for(int i=0;i<w+2;i++)maketop<<".";

    a[0]=maketop.str();
    a[h+1]=maketop.str();

    for(int i=0;i<h;i++)
    {
        str s;
        cin>>s;
        ss makemid;

        makemid<<"."<<s<<".";
        
        a[i+1]=makemid.str();
    }

    bool ans=true;

    for(int i=1;i<=h;i++)for(int j=1;j<=w;j++)
    {
        if(a[i][j]=='#')
        {
            bool c=true;
            for(int k=0;k<DIRMAX;k++)
            if(a[i+dir[k].fi][j+dir[k].se]=='#')
            {
                c=false;
                break;
            }

            if(c)
            {
                ans=false;
                break;
            }
        }
    }

    puts(ans?"Yes":"No");

    return 0;
}

#include <bits/stdc++.h>
#define rep(i, n) for (int i = 0; i < (int)(n); i++)
#define rep2(i, s, n) for (int i = (s); i < (int)(n); i++)
using namespace std;
using P = pair<int, int>; 
using ll = long long;
using M = map<int, int>;

int main()
{
  int n, m;
  cin >> n >> m;
  char c[n][m];
  rep(i, n){
    rep(j, m) cin >> c[i][j];
  }
  
  string s = "Yes";
  int cnt;
  rep(i, n){
    rep(j, m){
      if(c[i][j] == '.') continue;
      cnt = 0;
      if(i != 0 && c[i - 1][j] == '#') cnt++;
      if(i != n - 1 && c[i + 1][j] == '#') cnt++;
      if(j != 0 && c[i][j - 1] == '#') cnt++;
      if(j != m - 1 && c[i][j + 1] == '#') cnt++;
      if(cnt == 0) {
        s = "No";
      }
    }
  }
  cout << s << endl;
       

  return 0;
}