#include <bits/stdc++.h>
using namespace std;
const int MX = 1005;
int t, chk[MX][MX];
set<int> X, Y;
char D[MX][MX];
int N, M, tot;
int fill(int h1, int w1, int h2, int w2) {
  int res = 0;
  for (int i = w1; i <= w2; i++) {
    if (D[h1][i] == '.') res -= 9999;
    if (chk[h1][i] != t && D[h1][i] == '#') res++, chk[h1][i] = t;
    if (D[h2][i] == '.') res -= 9999;
    if (chk[h2][i] != t && D[h2][i] == '#') res++, chk[h2][i] = t;
  }
  for (int i = h1 + 1; i < h2; i++) {
    if (D[i][w1] == '.') res -= 9999;
    if (chk[i][w1] != t && D[i][w1] == '#') res++, chk[i][w1] = t;
    if (D[i][w2] == '.') res -= 9999;
    if (chk[i][w2] != t && D[i][w2] == '#') res++, chk[i][w2] = t;
  }
  return res;
}
int main() {
  scanf("%d%d", &N, &M);
  for (int i = 1; i <= N; i++) scanf("%s", D[i] + 1);
  for (int i = 1; i <= N; i++) {
    for (int j = 1; j <= M; j++) {
      if (D[i][j] == '#') tot++;
      if (D[i][j - 1] == '#' && D[i][j] == '#' && D[i][j + 1] == '#')
        X.insert(i);
      if (D[i - 1][j] == '#' && D[i][j] == '#' && D[i + 1][j] == '#')
        Y.insert(j);
    }
  }
  if (X.size() > 4) X.erase(++ ++X.begin(), -- --X.end());
  if (Y.size() > 4) Y.erase(++ ++Y.begin(), -- --Y.end());
  for (int h1 : X)
    for (int h2 : X)
      for (int h3 : X)
        for (int h4 : X)
          for (int w1 : Y)
            for (int w2 : Y)
              for (int w3 : Y)
                for (int w4 : Y) {
                  if (h2 - h1 < 2 || w2 - w1 < 2 || h4 - h3 < 2 || w4 - w3 < 2)
                    continue;
                  else {
                    t++;
                    int cnt = fill(h1, w1, h2, w2);
                    cnt += fill(h3, w3, h4, w4);
                    if (cnt == tot) {
                      return !printf("YES\n%d %d %d %d\n%d %d %d %d\n", h1, w1,
                                     h2, w2, h3, w3, h4, w4);
                    }
                  }
                }
  printf("NO\n");
  return 0;
}
