use std::io;
use std::str::FromStr;
use std::collections::HashSet;

fn input_tuple() -> (u64, u64) {
    let mut line: String = String::new();
    io::stdin().read_line(&mut line);
    let vec: Vec<u64> = line.split_whitespace().map(|s| s.parse().unwrap()).collect();
    (vec[0], vec[1])
}

fn input_char_vec() -> Vec<char> {
    let mut line: String = String::new();
    io::stdin().read_line(&mut line);
    line.trim().chars().collect()
}

fn main() {
    let (h, w) = input_tuple();
    let mut grid: Vec<Vec<char>> = Vec::new();
    for _ in 0..h {
        let row = input_char_vec();
        grid.push(row);
    }

    for i in 0..h as usize {
        for j in 0..w as usize {
            if grid[i][j] == '#' {
                let mut flag = false;
                if i > 0 && grid[i-1][j] == '#' {
                    flag = true;
                }
                if i < w as usize - 1 && grid[i+1][j] == '#' {
                    flag = true;
                }
                if j > 0 && grid[i][j - 1] == '#' {
                    flag = true;
                }
                if j < h as usize - 1 && grid[i][j + 1] == '#' {
                    flag = true;
                }
                if !flag {
                    println!("No");
                    return;
                }
            }
        }
    }
    println!("Yes");
}
