#include <bits/stdc++.h>
using namespace std;
const int N = 1e3 + 5;
const int mod = 1e9 + 7;
const int level = 20;
int dx[] = {1, -1, 0, 0, 1, 1, -1, -1};
int dy[] = {0, 0, 1, -1, 1, -1, 1, -1};
vector<int> v[N];
bool discard[N];
int equal_(vector<int> a, vector<int> b) {
  int ret = 0;
  int i = 0;
  int j = 0;
  while (i < a.size() and j < b.size()) {
    if (a[i] < b[j])
      i++;
    else if (a[i] > b[j])
      j++;
    else {
      ret++;
      i++;
      j++;
    }
  }
  return ret;
}
int main() {
  ios::sync_with_stdio(false);
  int n, 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];
      if (arr[i][j] == '#') v[i].push_back(j);
    }
  }
  for (int i = 0; i < n; i++) {
    if (discard[i]) continue;
    for (int j = i + 1; j < n; j++) {
      if (i == j or discard[j]) continue;
      int cnt = equal_(v[i], v[j]);
      if ((cnt > 0 and cnt != v[j].size()) or
          (cnt > 0 and v[i].size() != v[j].size())) {
        cout << "No\n";
        return 0;
      }
      if (cnt == v[j].size()) discard[j] = true;
    }
  }
  cout << "Yes\n";
  return 0;
}
