#include <bits/stdc++.h>
using namespace std;
using INT = long long;
using VI = vector<int>;
using pii = pair<int, int>;
template <typename A, typename B>
void smin(A &a, const B &b) {
  if (a > b) a = b;
}
template <typename A, typename B>
void smax(A &a, const B &b) {
  if (a < b) a = b;
}
char s[1010][1010];
int n, m;
bool out(int u, int v) { return u < 1 || v < 1 || u > n || v > m; }
char a[1010][1010];
void update(int ax, int ay, int bx, int by) {
  for (int i = ax; i <= bx; i++) {
    a[i][ay] = a[i][by] = '#';
  }
  for (int j = ay; j <= by; j++) {
    a[ax][j] = a[bx][j] = '#';
  }
}
void solve(int ax, int ay, int bx, int by, int Ax, int Ay, int Bx, int By) {
  for (int i = 1; i <= n; i++) {
    for (int j = 1; j <= m; j++) a[i][j] = '.';
  }
  update(ax, ay, bx, by);
  update(Ax, Ay, Bx, By);
  for (int i = 1; i <= n; i++) {
    for (int j = 1; j <= m; j++) {
      if (a[i][j] != s[i][j]) return;
    }
  }
  puts("YES");
  printf("%d %d %d %d\n", ax, ay, bx, by);
  printf("%d %d %d %d\n", Ax, Ay, Bx, By);
  exit(0);
}
int main() {
  scanf("%d %d", &n, &m);
  for (int i = 1; i <= n; i++) scanf("%s", s[i] + 1);
  VI vx, vy;
  for (int i = 1; i <= n; i++) {
    for (int j = 2; j < m; j++)
      if (s[i][j - 1] == '#' && s[i][j] == '#' && s[i][j + 1] == '#') {
        vx.push_back(i);
        break;
      }
  }
  if (vx.size() > 4) {
    vx[3] = vx.back();
    vx.pop_back();
    vx[2] = vx.back();
    vx.pop_back();
    vx.resize(4);
  }
  for (int j = 1; j <= m; j++) {
    for (int i = 2; i < n; i++)
      if (s[i - 1][j] == '#' && s[i][j] == '#' && s[i + 1][j] == '#') {
        vy.push_back(j);
        break;
      }
  }
  if (vy.size() > 4) {
    vy[3] = vy.back();
    vy.pop_back();
    vy[2] = vy.back();
    vy.pop_back();
    vy.resize(4);
  }
  for (int ax = 0; ax < vx.size(); ax++) {
    for (int ay = 0; ay < vy.size(); ay++) {
      for (int bx = ax + 1; bx < vx.size(); bx++)
        if (vx[bx] - vx[ax] > 1) {
          for (int by = ay + 1; by < vy.size(); by++)
            if (vy[by] - vy[ay] > 1) {
              for (int Ax = 0; Ax < vx.size(); Ax++) {
                for (int Ay = 0; Ay < vy.size(); Ay++) {
                  for (int Bx = Ax + 1; Bx < vx.size(); Bx++)
                    if (vx[Bx] - vx[Ax] > 1) {
                      for (int By = Ay + 1; By < vy.size(); By++)
                        if (vy[By] - vy[Ay] > 1) {
                          solve(vx[ax], vy[ay], vx[bx], vy[by], vx[Ax], vy[Ay],
                                vx[Bx], vy[By]);
                        }
                    }
                }
              }
            }
        }
    }
  }
  puts("NO");
}
