import java.io.*
import java.util.*

const val YES = "Yes"
const val NO = "No"
fun solve(H: Int, W: Int, s: Array<String>){
    for(i in 0 until H){
        for(j in 0 until W){
            if (s[i][j] == '.') continue
            val adjacents = listOf(
                s.safeGet(i + 1, j) , s.safeGet(i, j + 1) , s.safeGet(i-1, j) , s.safeGet(i, j-1)
            )
            val ret = adjacents.map{
                when(it){
                    '#' -> 0
                    else -> 1
                }}.sum()
            if (ret == 4){println(NO); return}
        }
    }
    println(YES)
    return
}

fun Array<String>.safeGet(i: Int, j: Int): Char? = when{
    i < 0 || i >= size -> null
    else -> this[i].getOrNull(j)
}

fun main(args: Array<String>) {
    fun StringArray(size: Int, init: (Int) -> String = { "\u0000" }): Array<String> {
        return Array<String>(size, init)
    }
    class Scanner(stream: InputStream) {
        private val reader = BufferedInputStream(stream).bufferedReader()
        private var st: StringTokenizer? = null
        fun next(): String {
            while (!(st?.hasMoreTokens() ?: false)) st = StringTokenizer(reader.readLine())
            return st!!.nextToken()
        }
    }
    val sc = Scanner(System.`in`)
    val H = sc.next().toInt()
    val W = sc.next().toInt()
    val s = StringArray(W)
    for (i in 0 until W) {
        s[i] = sc.next()
    }
    solve(H, W, s)
}

