#include <bits/stdc++.h>
using namespace std;
struct {
  int i, j;
} typedef point;
int H, W;
int A[50][50];
bool visited[50][50];
int dfs(int i, int j) {
  int sum = 0;
  queue<point> Q;
  Q.push({i, j});
  ++sum;
  while (!Q.empty()) {
    int i, j;
    i = Q.front().i;
    j = Q.front().j;
    Q.pop();
    if (i - 1 >= 0 && !visited[i - 1][j] && A[i - 1][j] == 1) {
      ++sum;
      Q.push({i - 1, j});
    }
    if (i + 1 < H && !visited[i + 1][j] && A[i + 1][j] == 1) {
      ++sum;
      Q.push({i + 1, j});
    }
    if (j - 1 >= 0 && !visited[i][j - 1] && A[i][j - 1] == 1) {
      ++sum;
      Q.push({i, j - 1});
    }
    if (j + 1 < W && !visited[i][j + 1] && A[i][j + 1] == 1) {
      ++sum;
      Q.push({i, j + 1});
    }
    visited[i][j] = true;
  }
  return sum;
}
bool judge(void) {
  for (int i = 0; i < H; ++i) {
    for (int j = 0; j < W; ++j) {
      if (A[i][j] == 1 && !visited[i][j]) {
        if (dfs(i, j) <= 1) return false;
      }
    }
  }
  return true;
}
int main() {
  cin >> H >> W;
  for (int i = 0; i < H; ++i) {
    string s;
    cin >> s;
    for (int j = 0; j < s.size(); ++j) {
      if (s[j] == '.')
        A[i][j] = 0;
      else
        A[i][j] = 1;
    }
  }
  if (judge())
    cout << "Yes\n";
  else
    cout << "No\n";
}
