#include <bits/stdc++.h>
const int N = 107, inf = 0x3f3f3f3f;
using namespace std;
int vis[N][N];
char mat[N][N];
set<int> col, row;
int n, m;
void dfs(int p, int q) {
  col.insert(q);
  row.insert(p);
  vis[p][q] = 1;
  for (int i = 0; i < n; ++i) {
    if (mat[i][q] == '#' and vis[i][q] == 0) {
      dfs(i, q);
    }
  }
  for (int j = 0; j < m; ++j) {
    if (mat[p][j] == '#' and vis[p][j] == 0) {
      dfs(p, j);
    }
  }
}
int main() {
  ios::sync_with_stdio(false);
  cin >> n >> m;
  for (int i = 0; i < n; ++i) {
    for (int j = 0; j < m; ++j) {
      cin >> mat[i][j];
    }
  }
  for (int i = 0; i < n; ++i) {
    for (int j = 0; j < m; ++j) {
      if (vis[i][j]) continue;
      if (mat[i][j] == '#') {
        dfs(i, j);
        for (int p : row) {
          for (int q : col) {
            if (mat[p][q] == '.') {
              cout << "No" << endl;
              return 0;
            }
          }
        }
        row.clear();
        col.clear();
      }
    }
  }
  cout << "Yes" << endl;
}
