# -*- coding: utf-8 -*-
 
## Library
 
import sys
from fractions import gcd
import math
from math import ceil,floor
import collections
from collections import Counter
import itertools

## input
 
# N=int(input())
# A,B,C,D=map(int, input().split())
# S = input()
# yoko = list(map(int, input().split()))
# tate = [int(input()) for _ in range(N)]
# N, M = map(int,input().split()) 
#    P = [list(map(int,input().split())) for i in range(M)]
 
H,W=map(int, input().split())
S = []

for _ in range(H):
    S.append(list(input()))

ans = "Yes"

if H == 1 and W == 1:
    print("No")
    sys.exit()

if H == 1 and W == 2:
    if S[0][0] == "#" and S[0][1] == "#":
        print(ans)
        sys.exit()
    if S[0][0] == "#" and S[0][1] == ".":
        print("No")
        sys.exit()    
    if S[0][0] == "." and S[0][1] == "#":
        print("No")
        sys.exit()
    if S[0][0] == "#" and S[0][1] == "#":
        print(ans)
        sys.exit()

if H == 2 and W == 1:
    if S[0][0] == "#" and S[1][0] == "#":
        print(ans)
        sys.exit()
    if S[0][0] == "#" and S[1][0] == ".":
        print("No")
        sys.exit()    
    if S[0][0] == "." and S[1][0] == "#":
        print("No")
        sys.exit()
    if S[0][0] == "#" and S[1][0] == "#":
        print(ans)
        sys.exit()

# 四隅
if S[0][0] == "#":
    if S[0][1] == "." and S[1][0] == ".":
        print("No")
        sys.exit() 

if S[0][W-1] == "#":
    if S[0][W-2] == "." and S[1][W-1] == ".":
        print("No")
        sys.exit()       

if S[H-1][0] == "#":
    if S[H-1][1] == "." and S[H-2][0] == ".":
        print("No")
        sys.exit()  

if S[H-1][W-1] == "#":
    if S[H-1][W-2] == "." and S[H-2][W-1] == ".":
        print("No")
        sys.exit()  

# 四辺
for i in range(1,W-1):
    if S[0][i] == "#":
        if S[0][i-1] == "." and S[0][i+1] == "." and S[1][i] == ".":
            print("No")
            sys.exit() 

for i in range(1,W-1):
    if S[H-1][i] == "#":
        if S[H-1][i-1] == "." and S[H-1][i+1] == "." and S[H-2][i] == ".":
            print("No")
            sys.exit() 

for i in range(1,H-1):
    if S[i][0] == "#":
        if S[i][1] == "." and S[i-1][0] == "." and S[i+1][0] == ".":
            print("No")
            sys.exit() 

for i in range(1,H-1):
    if S[i][W-1] == "#":
        if S[i][W-2] == "." and S[i-1][W-1] == "." and S[i+1][W-1] == ".":
            print("No")
            sys.exit() 

# 内部
for i in range(1,W-1):
    for j in range(1,H-1):
        if S[i][j] == "#":
            if S[i-1][j] == "." and S[i+1][j] == "." and  S[i][j-1] == "." and  S[i][j+1]== ".":
                print("No")
                sys.exit()

print(ans)

### FIXED CODE ###

# -*- coding: utf-8 -*-
 
## Library
 
import sys
from fractions import gcd
import math
from math import ceil,floor
import collections
from collections import Counter
import itertools

## input
 
# N=int(input())
# A,B,C,D=map(int, input().split())
# S = input()
# yoko = list(map(int, input().split()))
# tate = [int(input()) for _ in range(N)]
# N, M = map(int,input().split()) 
#    P = [list(map(int,input().split())) for i in range(M)]
 
H,W=map(int, input().split())
S = []

S.append(['.']*(W+2))
for _ in range(H):
    S.append(['.']+list(input())+['.'])
S.append(['.']*(W+2))

for i in range(1,H-1):
    for j in range(1,W-1):
        if S[i][j] == "#" and S[i-1][j] == "." and S[i+1][j] == "." and  S[i][j-1] == "." and  S[i][j+1]== ".":
            print("No")
            sys.exit()

print("Yes")