#include <bits/stdc++.h>
using namespace std;
const int MAXN = 1000;
const int INF = 0x3f3f3f3f;
template <class T>
void Read(T &x) {
  x = 0;
  char c = getchar();
  bool flag = 0;
  while (c < '0' || '9' < c) {
    if (c == '-') flag = 1;
    c = getchar();
  }
  while ('0' <= c && c <= '9') {
    x = x * 10 + c - '0';
    c = getchar();
  }
  if (flag) x = -x;
}
int m, n;
char str[MAXN + 10][MAXN + 10];
int dx[5], dy[5];
bool used[MAXN + 10][MAXN + 10];
inline void check(int x1, int x2, int y1, int y2, int x3, int x4, int y3,
                  int y4) {
  memset(used, 0, sizeof(used));
  for (int i = y1; i <= y2; ++i) used[x1][i] = used[x2][i] = true;
  for (int i = x1; i <= x2; ++i) used[i][y1] = used[i][y2] = true;
  for (int i = y3; i <= y4; ++i) used[x3][i] = used[x4][i] = true;
  for (int i = x3; i <= x4; ++i) used[i][y3] = used[i][y4] = true;
  for (int i = 1; i <= m; ++i)
    for (int j = 1; j <= n; ++j)
      if ((str[i][j] == '#') ^ used[i][j]) return;
  puts("YES");
  printf("%d %d %d %d\n", x1, y1, x2, y2);
  printf("%d %d %d %d\n", x3, y3, x4, y4);
  exit(0);
}
int main() {
  Read(m), Read(n);
  for (int i = 1; i <= m; ++i) scanf("%s", str[i] + 1);
  for (int i = 1; i <= m; ++i) {
    int v = 0;
    for (int j = 1; j <= n + 1; ++j) {
      if (str[i][j] != '#') {
        if (v >= 3) {
          if (!dx[1])
            dx[1] = i;
          else if (!dx[2])
            dx[2] = i;
          else
            break;
        }
        v = 0;
      } else
        ++v;
    }
    if (dx[1] && dx[2]) break;
  }
  for (int i = m; i >= 1; --i) {
    int v = 0;
    for (int j = 1; j <= n + 1; ++j) {
      if (str[i][j] != '#') {
        if (v >= 3) {
          if (!dx[4])
            dx[4] = i;
          else if (!dx[3])
            dx[3] = i;
          else
            break;
        }
        v = 0;
      } else
        ++v;
    }
    if (dx[4] && dx[3]) break;
  }
  for (int i = 1; i <= n; ++i) {
    int v = 0;
    for (int j = 1; j <= m + 1; ++j) {
      if (str[j][i] != '#') {
        if (v >= 3) {
          if (!dy[1])
            dy[1] = i;
          else if (!dy[2])
            dy[2] = i;
          else
            break;
        }
        v = 0;
      } else
        ++v;
    }
    if (dy[1] && dy[2]) break;
  }
  for (int i = n; i >= 1; --i) {
    int v = 0;
    for (int j = 1; j <= m + 1; ++j) {
      if (str[j][i] != '#') {
        if (v >= 3) {
          if (!dy[4])
            dy[4] = i;
          else if (!dy[3])
            dy[3] = i;
          else
            break;
        }
        v = 0;
      } else
        ++v;
    }
    if (dy[4] && dy[3]) break;
  }
  for (int x1 = 1; x1 <= 4; ++x1)
    for (int x2 = x1 + 1; x2 <= 4; ++x2)
      if (dx[x2] - dx[x1] + 1 >= 3)
        for (int y1 = 1; y1 <= 4; ++y1)
          for (int y2 = y1 + 1; y2 <= 4; ++y2)
            if (dy[y2] - dy[y1] + 1 >= 3)
              for (int x3 = 1; x3 <= 4; ++x3)
                for (int x4 = x3 + 1; x4 <= 4; ++x4)
                  if (dx[x4] - dx[x3] + 1 >= 3)
                    for (int y3 = 1; y3 <= 4; ++y3)
                      for (int y4 = y3 + 1; y4 <= 4; ++y4)
                        if (dy[y4] - dy[y3] + 1 >= 3)
                          check(dx[x1], dx[x2], dy[y1], dy[y2], dx[x3], dx[x4],
                                dy[y3], dy[y4]);
  puts("NO");
}
