#include <bits/stdc++.h>
using namespace std;
char m[100][100];
int main() {
  int h, w;
  scanf("%d%d%*c", &h, &w);
  for (int i = 0; i < h; i++) {
    for (int j = 0; j < w; j++) {
      scanf("%c", &m[i][j]);
    }
    getchar();
  }
  for (int i = 0; i < h - 1; i++) {
    for (int j = 0; j < w; j++) {
      if (m[i][j] == '.') continue;
      if (m[i][j] == '%') {
        if (j < w - 1 && m[i][j + 1] == '#') {
          m[i][j] = m[i][j + 1] = '%';
        }
        if (m[i + 1][j] == '#') {
          m[i][j] = m[i + 1][j] = '%';
        }
      } else if (m[i][j] == '!') {
        if (j < w - 1 && (m[i][j + 1] == '.' || m[i][j + 1] == '!')) {
          m[i][j] = m[i][j + 1] = '.';
        }
        if (m[i + 1][j] == '.') {
          m[i][j] = m[i + 1][j] = '.';
        }
        if (m[i][j] == '!') {
          m[i][j] = '.';
        }
      } else {
        if (j < w - 1 && (m[i][j + 1] == '#' || m[i][j + 1] == '%')) {
          m[i][j] = m[i][j + 1] = '%';
        }
        if (m[i + 1][j] == '#') {
          m[i][j] = m[i + 1][j] = '%';
        }
        if (m[i][j] == '#') {
          printf("No");
          return 0;
        }
      }
    }
  }
  for (int j = 0; j < w - 1; j++) {
    if ((m[h - 1][j] == '#' || m[h - 1][j] == '%') &&
        (m[h - 1][j + 1] == '#' || m[h - 1][j + 1] == '%')) {
      m[h - 1][j] = m[h - 1][j + 1] = '.';
    }
    if (m[h - 1][j] == '!') {
      if (m[h - 1][j + 1] == '#' || m[h - 1][j + 1] == '%') {
        m[h - 1][j] = '.';
      }
      if (m[h - 1][j + 1] == '!' || m[h - 1][j + 1] == '.') {
        m[h - 1][j] = m[h - 1][j + 1] = '.';
      }
    }
  }
  for (int j = 0; j < w; j++) {
    if (m[h - 1][j] == '#' || (m[h - 1][j] == '!')) {
      printf("No");
      return 0;
    }
  }
  printf("Yes");
  return 0;
}
