import Control.Monad

data Grids = Grids Int Int [String]

grid :: Grids -> Int -> Int -> Char
grid (Grids _ _ grids) i j = (grids !! i) !! j

right :: Grids -> Int -> Int -> [Char]
right grids@(Grids _ w _) i j
  | j < (w - 1) = [grid grids i (j + 1)]
  | otherwise   = []

left :: Grids -> Int -> Int -> [Char]
left grids i j
  | 0 < j     = [grid grids i (j - 1)]
  | otherwise = []

up :: Grids -> Int -> Int -> [Char]
up grids i j
  | 0 < i     = [grid grids (i - 1) j]
  | otherwise = []

down :: Grids -> Int -> Int -> [Char]
down grids@(Grids h _ _) i j
  | i < (h - 1) = [grid grids (i + 1) j]
  | otherwise   = []

neighbors :: Grids -> Int -> Int -> [Char]
neighbors grids i j = right grids i j ++ left grids i j ++ up grids i j ++ down grids i j

isBlack :: Grids -> Int -> Int -> Bool
isBlack grids i j = grid grids i j == '#'

isAllNeighborsWhite :: Grids -> Int -> Int -> Bool
isAllNeighborsWhite grids i j = all (== '.') $ neighbors grids i j

solve :: Int -> Int -> [String] -> Bool
solve h w g = null blackAndAllNeighborsWhite
  where grids = Grids h w g
        points = [(i, j) | i <- [0..(h - 1)], j <- [0..(w - 1)]]
        blacks = filter (\(i, j) -> isBlack grids i j) points
        blackAndAllNeighborsWhite = filter (\(i, j) -> isAllNeighborsWhite grids i j) blacks

main :: IO ()
main = do
  [h, w] <- map read . words <$> getLine
  grids <- replicateM h getLine
  putStrLn $ if solve h w grids then "Yes" else "No"