using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Practice
{
    class Program
    {
        static void Main(string[] args)
        {
            string szLine = Console.ReadLine();
            string[] szArr = szLine.Split(' ');
            int h = int.Parse(szArr[0]);
            int w = int.Parse(szArr[1]);

            bool[,] data = new bool[h, w];// #ならtrue
            for( int i=0;i<h;++i)
            {
                szLine = Console.ReadLine();
                for( int j = 0;j< szLine.Length;++j)
                {
                    data[i, j] = szLine[j] == '#';
                }
            }

            // 格子なら×
            for(int i=0;i<h;++i)
            {
                for(int j=0;j<w;++j)
                {
                    if (!data[i, j]) { continue; }

                    // まわりを確認して格子になってたらアウト
                    if( i+1 >= h || i -1 < 0 || j+1 >= w || j - 1 < 0) { continue; }// 枠外は無視

                    if(i+1 < h && data[i+1, j]) { continue; }
                    if(i - 1 >= 0 && data[i - 1, j]) { continue; }
                    if(j+1 < w && data[i, j + 1]) { continue; }
                    if(j-1 >= 0 && data[i, j - 1]) { continue; }

                    if( (i + 1 < h && j + 1 < w && data[i+1, j+1]) ||
                        (i + 1 < h && j - 1 >= 0 && data[i + 1, j - 1]) ||
                         (i - 1 >= 0 && j + 1 < w && data[i - 1, j + 1]) ||
                          (i - 1 >= 0 && j - 1 >= 0 && data[i - 1, j - 1]))
                    {
                        Console.WriteLine("NO");
                        return;
                    }
                }
            }
            Console.WriteLine("YES");
        }
    }
}
