import Data.List
import Control.Monad
import Data.Array.IO
import Data.Array.Unboxed
import qualified Data.ByteString.Char8 as B

type Point = (Int,Int)
type IOField = IOUArray Point Char

main = do
    [h,w] <- map read.words<$>getLine
    fld   <- newArray ((0,0),(h+1,w+1)) '.' :: IO IOField
    forM_ [1..h] $ \i -> do
        ls <- B.getLine
        forM_ [1..w] $ \j -> do
            let c = B.index ls (j-1)
            writeArray fld (i,j) c
    --
    r <- (and <$>) $ forM [1..h] $ \i -> do
            (and <$>) $ forM [1..w] $ \j -> do
                c <- readArray fld (i,j)
                if c == '.'
                    then return True
                    else do
                        ch <- mapM (\(di,dj) ->(=='#') <$> readArray fld (i+di,j+dj)) [(-1,0),(1,0),(0,-1),(0,1)]
                        return $ or ch
    putStrLn $ if r then "Yes" else "No"
