#include <bits/stdc++.h>
using namespace std;
const int maxn = 1e3 + 10;
char mp[maxn][maxn];
bool vis[maxn][maxn];
int n, m;
void check(int a, int b) {
  bool flag = 1;
  for (int i = -1; i <= 1; i++) {
    for (int j = -1; j <= 1; j++) {
      if (i == 0 && j == 0) break;
      if (a + i < 0 || a + i >= n || b + j < 0 || b + j >= m ||
          mp[a + i][b + j] != '#') {
        flag = false;
        break;
      }
    }
  }
  if (flag) {
    for (int i = -1; i <= 1; i++) {
      for (int j = -1; j <= 1; j++) {
        if (i == 0 && j == 0) continue;
        vis[a + i][b + j] = 1;
      }
    }
  }
}
int main() {
  memset(vis, 0, sizeof vis);
  scanf("%d%d", &n, &m);
  for (int i = 0; i < n; i++) scanf("%s", mp[i]);
  for (int i = 0; i < n; i++) {
    for (int j = 0; j < m; j++) {
      check(i, j);
    }
  }
  bool flag = 1;
  for (int i = 0; i < n; i++) {
    for (int j = 0; j < m; j++) {
      if (mp[i][j] == '#' && !vis[i][j]) {
        flag = 0;
        break;
      }
    }
  }
  if (flag)
    printf("YES\n");
  else
    printf("NO\n");
  return 0;
}
