#include <bits/stdc++.h>
using std::cin;
using std::cout;
using std::endl;
using std::vector;
int main() {
  int n = 0, m = 0, count1 = 0, count2 = 0;
  int r[51] = {0};
  char grid[51][51];
  vector<int> raw, column;
  cin >> n >> m;
  for (int i = 0; i < n; i++) {
    for (int j = 0; j < m; j++) {
      cin >> grid[i][j];
      if (grid[i][j] == '#') count1++;
    }
  }
  for (int i = 0; i < n; i++) {
    if (r[i]) continue;
    r[i] = 1;
    raw.push_back(i);
    for (int j = 0; j < m; j++) {
      if (grid[i][j] == '#') {
        count2++;
        column.push_back(j);
        for (int k = i + 1; k < n; k++) {
          if (grid[k][j] == '#') {
            int judge = 1;
            if (r[k]) {
              for (int q = 0; q < raw.size(); q++) {
                if (k == raw[q]) {
                  count2++;
                  break;
                } else
                  judge = 0;
              }
            } else {
              count2++;
              r[k] = 1;
              raw.push_back(k);
            }
          }
        }
      }
    }
    for (int j = 0; j < raw.size(); j++) {
      for (int k = 0; k < column.size(); k++) {
        if (grid[raw[j]][column[k]] != '#') {
          cout << "No" << endl;
          return 0;
        }
      }
    }
    raw.clear();
    column.clear();
  }
  if (count1 == count2)
    cout << "Yes" << endl;
  else
    cout << "No" << endl;
  return 0;
}
