#include <bits/stdc++.h>
using namespace std;
stack<int> rows, cols;
int row[100], col[100];
int n, m, id, x, y;
char znak;
int tab[100][100], cp[100][100], out[100][100];
void bfs() {
  while (!rows.empty() || !cols.empty()) {
    while (!rows.empty()) {
      x = rows.top();
      rows.pop();
      for (int a = 1; a <= m; a++) {
        if (tab[x][a]) {
          if (!col[a]) col[a] = id, cols.push(a);
          if (!row[x]) row[x] = id, rows.push(x);
          tab[x][a] = 0;
        }
      }
    }
    while (!cols.empty()) {
      y = cols.top();
      cols.pop();
      for (int a = 1; a <= n; a++) {
        if (tab[a][y]) {
          if (!col[y]) col[y] = id, cols.push(y);
          if (!row[a]) row[a] = id, rows.push(a);
          tab[a][y] = 0;
        }
      }
    }
  }
}
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cin >> n >> m;
  for (int a = 1; a <= n; a++) {
    for (int b = 1; b <= m; b++) {
      cin >> znak;
      tab[a][b] = (znak == '#');
      cp[a][b] = tab[a][b];
    }
  }
  for (int a = 1; a <= n; a++) {
    for (int b = 1; b <= m; b++) {
      if (tab[a][b]) {
        ++id;
        tab[a][b] = 0;
        col[b] = id;
        row[a] = id;
        rows.push(a);
        cols.push(b);
        bfs();
      }
    }
  }
  for (int a = 1; a <= n; a++) {
    for (int b = 1; b <= m; b++) {
      if (row[a] == col[b] && row[a] != 0) out[a][b] = 1;
      if (out[a][b] != cp[a][b]) {
        cout << "No";
        return 0;
      }
    }
  }
  cout << "Yes";
  return 0;
}
