#include <bits/stdc++.h>
using namespace std;
int main() {
  cin.tie(nullptr);
  ios_base::sync_with_stdio(false);
  int n, m;
  cin >> n >> m;
  vector<vector<char>> mp(n, vector<char>(m));
  for (int i = 0; i < n; ++i) {
    for (int j = 0; j < m; ++j) {
      cin >> mp[i][j];
    }
  }
  vector<bool> rows(n), columns(m);
  for (int i = 0; i < n; ++i) {
    if (rows[i]) {
      continue;
    }
    vector<int> cur_cols;
    for (int j = 0; j < m; ++j) {
      if (mp[i][j] == '#') {
        cur_cols.push_back(j);
      }
    }
    if (cur_cols.empty()) {
      rows[i] = 1;
      continue;
    }
    vector<int> cur_rows;
    for (int k = 0; k < n; ++k) {
      if (mp[k][cur_cols[0]] == '#') {
        cur_rows.push_back(k);
      }
    }
    for (auto j : cur_cols) {
      vector<int> next_rows;
      for (int k = 0; k < n; ++k) {
        if (mp[k][j] == '#') {
          next_rows.push_back(k);
          if (rows[k]) {
            cout << "No";
            return 0;
          }
        }
      }
      if (next_rows != cur_rows) {
        cout << "No";
        return 0;
      }
    }
    for (auto k : cur_rows) {
      vector<int> next_cols;
      for (int j = 0; j < m; ++j) {
        if (mp[k][j] == '#') {
          next_cols.push_back(j);
          if (columns[j]) {
            cout << "No";
            return 0;
          }
        }
      }
      if (next_cols != cur_cols) {
        cout << "No";
        return 0;
      }
    }
    for (auto k : cur_rows) {
      rows[k] = 1;
    }
    for (auto j : cur_cols) {
      columns[j] = 1;
    }
  }
  cout << "Yes";
  return 0;
}
