#include <bits/stdc++.h>
using namespace std;
int main() {
  int n, m;
  cin >> n >> m;
  vector<set<int>> rows(m);
  vector<set<int>> cols(n);
  vector<vector<int>> table(n, vector<int>(m, 0));
  for (int i = 0; i < n; ++i) {
    for (int j = 0; j < m; ++j) {
      char c;
      cin >> c;
      if (c == '.') {
        table[i][j] = 0;
      } else {
        table[i][j] = 1;
        rows[j].insert(i);
        cols[i].insert(j);
      }
    }
  }
  for (int i = 0; i < n; ++i) {
    for (int j = 0; j < n; ++j) {
      auto it = cols[i].begin();
      auto it1 = cols[j].begin();
      bool has_to_finish = false;
      while ((it != cols[i].end()) && (it1 != cols[j].end())) {
        if (*it != *it1) {
          has_to_finish = true;
        }
        ++it;
        ++it1;
      }
      if ((has_to_finish) || (it != cols[i].end()) || (it1 != cols[j].end())) {
        it = cols[i].begin();
        while (it != cols[i].end()) {
          int k = *it;
          if (cols[j].find(k) != cols[j].end()) {
            cout << "No" << endl;
            return 0;
          }
          ++it;
        }
      }
    }
  }
  for (int i = 0; i < m; ++i) {
    for (int j = 0; j < m; ++j) {
      auto it = rows[i].begin();
      auto it1 = rows[j].begin();
      bool has_to_finish = false;
      while ((it != rows[i].end()) && (it1 != rows[j].end())) {
        if (*it != *it1) {
          has_to_finish = true;
        }
        ++it;
        ++it1;
      }
      if ((has_to_finish) || (it != rows[i].end()) || (it1 != rows[j].end())) {
        it = rows[i].begin();
        while (it != rows[i].end()) {
          int k = *it;
          if (rows[j].find(k) != rows[j].end()) {
            cout << "No" << endl;
            return 0;
          }
          ++it;
        }
      }
    }
  }
  cout << "Yes" << endl;
}
