#include <bits/stdc++.h>
using namespace std;
using ll = long long;
using ii = pair<int, int>;
using vi = vector<int>;
const int INF = 0x3f3f3f3f;
const ll LINF = 0x3f3f3f3f3f3f3fLL;
const double err = 1e-9;
const int mod = 1e9 + 7;
const int N = 1e5 + 10;
char p[1001][1001];
char r[1001][1001];
int main() {
  ios::sync_with_stdio(0);
  cin.tie(NULL);
  int n, m;
  cin >> n >> m;
  for (int(i) = (0); (i) < (n); (i)++)
    for (int(j) = (0); (j) < (m); (j)++) cin >> p[i][j], r[i][j] = '.';
  for (int(i) = (0); (i) < (n - 2); (i)++) {
    for (int(j) = (0); (j) < (m - 2); (j)++) {
      bool ok = true;
      for (int(ik) = (0); (ik) < (3); (ik)++) {
        for (int(jk) = (0); (jk) < (3); (jk)++) {
          if (ik == 1 and jk == 1) continue;
          if (p[ik + i][jk + j] != '#') ok = false;
        }
      }
      if (ok) {
        for (int(ik) = (0); (ik) < (3); (ik)++) {
          for (int(jk) = (0); (jk) < (3); (jk)++) {
            if (!(ik == 1 and jk == 1)) r[i + ik][j + jk] = '#';
          }
        }
      }
    }
  }
  bool val = true;
  for (int(i) = (0); (i) < (n); (i)++)
    for (int(j) = (0); (j) < (m); (j)++)
      if (p[i][j] != r[i][j]) val = false;
  cout << (val ? "YES" : "NO") << endl;
  return 0;
}
