import std.stdio;
import std.string;
import std.conv;
import std.algorithm;

const dx = [0, 1, 0, -1];
const dy = [1, 0, -1, 0];
int H, W;
bool[55][55] memo;
string[] s;


int bfs(int h, int w) {
    if (!(0 <= h && h < H && 0 <= w && w < W)) return 0;
    if (s[h][w] == '.') return 0;
    if (s[h][w] == '#' && memo[h][w] == true) return 0;
    memo[h][w] = true;
    int ans;
    for (int i = 0; i < 4; i++) {
        ans += bfs(h + dy[i], w + dx[i]);
    }
    return ans + 1;
}


void main() {
    int[] buf = readln.chomp.split.to!(int[]);
    H = buf[0], W = buf[1];
    for (int i = 0; i < H; i++) {
        s ~= readln.chomp;
    }

    bool flg = true;
    for (int i = 0; i < H; i++) {
        for (int j = 0; j < W; j++) {
            flg &= (bfs(i, j) == 1 ? false : true);
        }
    }

    writeln(flg ? "Yes" : "No");
}