#include <bits/stdc++.h>
using namespace std;
int n, m;
string s[55];
vector<int> getRow(int x) {
  vector<int> R;
  for (int i = 1; i <= m; i++)
    if (s[x][i] == '#') R.push_back(i);
  return R;
}
vector<int> getCol(int x) {
  vector<int> C;
  for (int i = 1; i <= n; i++)
    if (s[i][x] == '#') C.push_back(i);
  return C;
}
int Viz[55];
int main() {
  cin >> n >> m;
  for (int i = 1; i <= n; i++) {
    string t;
    cin >> t;
    s[i] = '.' + t + '.';
  }
  int nope = 0;
  for (int i = 1; i <= n && !nope; i++) {
    if (!Viz[i]) {
      vector<int> V, R;
      int ok = 0;
      for (int j = 1; j <= m; j++) {
        if (s[i][j] == '#') {
          R.push_back(j);
          if (!ok)
            V = getCol(j), ok = 1;
          else {
            vector<int> U = getCol(j);
            if (U != V) nope = 1;
          }
        }
      }
      for (int j : V) {
        Viz[j] = 1;
        vector<int> Row = getRow(j);
        if (R != Row) {
          nope = 1;
        }
      }
    }
  }
  if (nope)
    cout << "No";
  else
    cout << "Yes";
  return 0;
}
