#include <bits/stdc++.h>
using namespace std;
char v[55][55];
bool used[2][55];
vector<int> r, c;
void check() {
  for (int i = 0; i < r.size(); i++) {
    for (int j = 0; j < c.size(); j++) {
      if (v[r[i]][c[j]] != '#') {
        cout << "No" << endl;
        exit(0);
      }
    }
  }
  r.clear();
  c.clear();
}
signed main() {
  cin.tie(0);
  cout.tie(0);
  cin.sync_with_stdio(0);
  cout.sync_with_stdio(0);
  int n, m;
  cin >> n >> m;
  for (int i = 0; i < n; i++) {
    string s;
    cin >> s;
    for (int j = 0; j < m; j++) {
      v[i][j] = s[j];
    }
  }
  queue<pair<int, int>> q;
  for (int i = 0; i < n; i++) {
    for (int j = 0; j < m; j++) {
      if (v[i][j] == '#' && !used[0][i] && !used[1][j]) {
        q.push({1, i});
        q.push({0, j});
        while (!q.empty()) {
          int x, y;
          tie(x, y) = q.front();
          q.pop();
          if (x == 0) {
            c.push_back(y);
            for (int t = 0; t < n; t++) {
              if (v[t][y] == '#' && !used[1][t]) {
                used[1][t] = 1;
                q.push({1, t});
              }
            }
          } else {
            r.push_back(y);
            for (int t = 0; t < m; t++) {
              if (v[y][t] == '#' && !used[0][t]) {
                used[0][t] = 1;
                q.push({0, t});
              }
            }
          }
        }
        check();
      }
    }
  }
  cout << "Yes" << endl;
}
