#include <bits/stdc++.h>
using namespace std;
const int maxn = 1005;
char st[maxn][maxn];
char tmp[maxn][maxn];
int row[maxn], rs;
int col[maxn], cs;
int n, m;
void init() {
  scanf("%d%d", &n, &m);
  for (int i = 1; i <= n; i++) scanf("%s", st[i] + 1);
}
void work() {
  rs = 0;
  for (int i = 1; i <= n; i++) {
    bool flag = 0;
    for (int j = 1; j <= m && !flag; j++)
      if (st[i][j] == '#' && st[i][j - 1] == '#' && st[i][j + 1] == '#')
        flag = 1;
    if (flag) row[rs++] = i;
  }
  cs = 0;
  for (int j = 1; j <= m; j++) {
    bool flag = 0;
    for (int i = 1; i <= n && !flag; i++)
      if (st[i][j] == '#' && st[i - 1][j] == '#' && st[i + 1][j] == '#')
        flag = 1;
    if (flag) col[cs++] = j;
  }
  if (rs > 4) {
    row[2] = row[rs - 2], row[3] = row[rs - 1];
    rs = 4;
  }
  if (cs > 4) {
    col[2] = col[cs - 2], col[3] = col[cs - 1];
    cs = 4;
  }
}
bool Same() {
  for (int i = 1; i <= n; i++)
    for (int j = 1; j <= m; j++)
      if (st[i][j] != tmp[i][j]) return 0;
  return 1;
}
bool Paint(int x1, int x2, int y1, int y2) {
  for (int i = x1; i <= x2; i++) {
    if (st[i][y1] != '#' || st[i][y2] != '#') return 0;
    tmp[i][y1] = tmp[i][y2] = '#';
  }
  for (int i = y1; i <= y2; i++) {
    if (st[x1][i] != '#' || st[x2][i] != '#') return 0;
    tmp[x1][i] = tmp[x2][i] = '#';
  }
  return 1;
}
void print() {
  for (int x1 = 0; x1 < rs; x1++)
    for (int x2 = x1 + 1; x2 < rs; x2++)
      if ((row[x2]) - (row[x1]) > 1)
        for (int y1 = 0; y1 < cs; y1++)
          for (int y2 = y1 + 1; y2 < cs; y2++)
            if ((col[y2]) - (col[y1]) > 1)
              for (int x3 = 0; x3 < rs; x3++)
                for (int x4 = x1 + 1; x4 < rs; x4++)
                  if ((row[x4]) - (row[x3]) > 1)
                    for (int y3 = 0; y3 < cs; y3++)
                      for (int y4 = y3 + 1; y4 < cs; y4++)
                        if ((col[y4]) - (col[y3]) > 1) {
                          memset(tmp, '.', sizeof(tmp));
                          if (!Paint((row[x1]), (row[x2]), (col[y1]),
                                     (col[y2])) ||
                              !Paint((row[x3]), (row[x4]), (col[y3]),
                                     (col[y4])))
                            continue;
                          if (Same()) {
                            printf("YES\n%d %d %d %d\n%d %d %d %d\n", (row[x1]),
                                   (col[y1]), (row[x2]), (col[y2]), (row[x3]),
                                   (col[y3]), (row[x4]), (col[y4]));
                            return;
                          }
                        }
  puts("NO");
}
int main() {
  init();
  work();
  print();
  return 0;
}
