import std.stdio;
import std.string;
import std.conv;
import std.range;
import std.array;
import std.algorithm;
import std.typecons;

void main(){
    auto hw = readln().chomp().split().map!(to!int).array();
    string[] grids;
    foreach(i; 0..(hw[0])){
        grids ~= readln().chomp();
    }
    solve(grids).writeln();
}

string solve(string[] grids){
    bool result = true;
    
    foreach(int y; 0..cast(int) grids.length){
        foreach(int x; 0..cast(int) grids[y].length){
            if(!check(x, y, grids)){
                result = false;
                break;
            }
        }
        if(!result){
            break;
        }
    }
    
    if(result){
        return "Yes";
    }else{
        return "No";
    }
}

bool check(int x, int y, string[] grids){
    bool result;
    if(grids[y][x] == '#'){
        if(x - 1 >= 0){
            if(grids[y][x-1] == '#'){
                result = true;
            }
        }
        if(y - 1 >= 0){
            if(grids[y - 1][x] == '#'){
                result = true;
            }
        }
        if(x + 1 < grids[y].length){
            if(grids[y][x+1] == '#'){
                result = true;
            }
        }
        if(y + 1 < grids.length){
            if(grids[y+1][x] == '#'){
                result = true;
            }
        }
    }else{
        result = true;
    }
    
    return result;
}