#include <bits/stdc++.h>
using namespace std;
char color[55][55];
int R[55], C[55];
int m, n;
bool ans = 1;
void dfs(int i, int j, int N) {
  if ((R[i] && R[i] != N) || (C[j] && C[j] != N)) {
    ans = 0;
    return;
  }
  if (!R[i]) {
    R[i] = N;
    for (int k = i + 1; k < m; k++)
      if (k != i && color[k][j] == '#') dfs(k, j, N);
  }
  if (!C[j]) {
    C[j] = N;
    for (int k = j + 1; k < n; k++)
      if (k != j && color[i][k] == '#') dfs(i, k, N);
  }
}
int main() {
  int N = 1;
  scanf("%d %d", &m, &n);
  for (int i = 0; i < m; i++)
    for (int j = 0; j < n; j++) scanf(" %c", &color[i][j]);
  for (int i = 0; i < 55; i++) R[i] = C[i] = 0;
  for (int i = 0; i < m; i++)
    for (int j = 0; j < n; j++)
      if (color[i][j] == '#' && !R[i] && !C[j]) {
        dfs(i, j, N);
        N++;
      }
  if (!ans) {
    printf("No\n");
    return 0;
  }
  for (int i = 0; i < m; i++)
    for (int j = 0; j < n; j++) {
      if (color[i][j] == '.') {
        if (R[i] && R[i] == C[j]) ans = 0;
      } else if (R[i] != C[j])
        ans = 0;
    }
  if (ans)
    printf("Yes\n");
  else
    printf("No\n");
  return 0;
}
