fun main(args: Array<String>) {
    val (height, width) = readLine()!!.trim().split(' ').map {it.toInt()}

    val table: Array<Array<Boolean>> = Array(height) {Array(width) {false}}

    (0..(height - 1)).forEach { y ->
        val chars: List<Char> = readLine()!!.trim().map {it}

        chars.forEachIndexed { x, char ->
            if (char == '#') {
                table[y][x] = true
            }
        }
    }

    if (canPaint(table, height, width)) {
        println("Yes")
    } else {
        println("No")
    }
}

fun canPaint(table: Array<Array<Boolean>>, height: Int, width: Int): Boolean {

    table.forEachIndexed { y, row ->
        row.forEachIndexed { x, black ->
            if (black && !isExistNearBlack(y, x, table, height, width)) {
                return false
            }
        }
    }

    return true
}

fun isExistNearBlack(y: Int, x: Int, table: Array<Array<Boolean>>, height: Int, width: Int): Boolean {

    val diffs = listOf(Pair(-1, 0), Pair(1, 0), Pair(0, -1), Pair(0, 1))
    diffs.forEach { diff ->
        val yDiff = diff.first
        val xDiff = diff.second
        val targetY = y + yDiff
        val targetX = x + xDiff

        if (targetY >= 0 && targetY < height &&
                        targetX >= 0 && targetX < width &&
                        table[targetY][targetX]
        ) {
            return true
        }
    }

    return false
}