{-# LANGUAGE OverloadedStrings #-}
import qualified Data.Vector as V
import qualified Data.ByteString.Char8 as B

isOK :: V.Vector B.ByteString -> Bool
isOK field = all (\p -> isDot p || isAsc p) [ (x , y)
                                            | x <- [1 .. h]
                                            , y <- [1 .. w] ]
  where h = V.length field - 2
        w = B.length (V.head field) - 2
        dxdy = [(1, 0), (-1, 0), (0, -1), (0, 1)]
        isDot (x, y) = field V.! x `B.index` y == '.'
        isAsc (x, y) = elem '#' $ do
          (dx ,dy) <- dxdy
          let nx = x + dx
              ny = y + dy
          return $ field V.! nx `B.index` ny
                                   

yesNo :: Bool -> B.ByteString
yesNo True = "Yes"
yesNo False = "No"

main :: IO ()
main = do
  [h, w] <- mapM readIO . words =<< getLine
  field <- V.replicateM h B.getLine
  let emptyRow = B.replicate (w + 2) '.'
      mkRow s = B.cons '.' $ B.snoc s '.' 
      field' = V.cons emptyRow $ V.snoc (V.map mkRow field) emptyRow
  B.putStrLn $ yesNo $ isOK field'
