#include <bits/stdc++.h>
const int ran = 1011;
int n, m;
char s[ran][ran], t[ran][ran];
bool valid(int x, int y) {
  for (int i = 0; i < 3; i++)
    for (int j = 0; j < 3; j++) {
      if (i == 1 && j == 1) continue;
      if (s[x + i][y + j] != '#') return false;
    }
  return true;
}
void p(int x, int y) {
  for (int i = 0; i < 3; i++)
    for (int j = 0; j < 3; j++) {
      if (i == 1 && j == 1) continue;
      t[x + i][y + j] = '#';
    }
}
int main() {
  scanf("%d%d", &n, &m);
  for (int i = 0; i < n; i++) scanf("%s", s[i]);
  for (int i = 0; i < n; i++)
    for (int j = 0; j < m; j++) t[i][j] = '.';
  for (int i = 0; i < n - 2; i++)
    for (int j = 0; j < m - 2; j++)
      if (valid(i, j)) p(i, j);
  for (int i = 0; i < n; i++)
    for (int j = 0; j < m; j++)
      if (s[i][j] != t[i][j]) {
        puts("NO");
        return 0;
      }
  puts("YES");
  return 0;
}
