#include <bits/stdc++.h>
using namespace std;
int main() {
  int n;
  int m;
  cin >> n >> m;
  char arr[n][m];
  for (int i = 0; i < n; i++) {
    for (int j = 0; j < m; j++) {
      cin >> arr[i][j];
    }
  }
  vector<set<int>> positions;
  for (int col = 0; col < m; col++) {
    set<int> match;
    for (int row = 0; row < n; row++) {
      if (arr[row][col] == '#') {
        match.insert(row);
      }
    }
    positions.push_back(match);
  }
  for (unsigned int i = 0; i < positions.size(); i++) {
    for (unsigned int j = 0; j < i; j++) {
      set<int> intersect;
      set<int>& s1 = positions[i];
      set<int>& s2 = positions[j];
      set_intersection(s1.begin(), s1.end(), s2.begin(), s2.end(),
                       std::inserter(intersect, intersect.begin()));
      if (intersect.size() != 0 &&
          (intersect.size() != s1.size() || intersect.size() != s2.size())) {
        cout << "No" << '\n';
        return 0;
      }
    }
  }
  cout << "Yes" << '\n';
  return 0;
}
