import Control.Monad (replicateM)
import Data.Array.IArray

makeGrid :: a -> (Int, Int) -> [[a]] -> Array (Int, Int) a
makeGrid e (h,w) xss = accumArray
                      (flip const)
                      e
                      ((0,0), (h+1,w+1))
                      [ ((i,j), x) | (i,xs) <- zip [1..] xss
                                   , (j,x)  <- zip [1..] xs
                      ]

adjacent :: Eq a => a -> Array (Int, Int) a -> (Int, Int) -> Bool
adjacent x grid (i,j) = grid ! (i,j) /= x
                     || grid ! (i-1,j) == x
                     || grid ! (i+1,j) == x
                     || grid ! (i,j-1) == x
                     || grid ! (i,j+1) == x

solve :: Array (Int, Int) Char -> String
solve grid = let (_, (h',w')) = bounds grid
             in if all (adjacent '#' grid) [ (i,j) | i <- [1 .. h'-1]
                                                   , j <- [1 .. w'-1]
                                           ]
                  then "Yes"
                  else "No"

main :: IO ()
main = do
  [h,w] <- map read . words <$> getLine
  grid <- makeGrid '.' (h,w) <$> replicateM h getLine
  putStrLn $ solve grid
