#include <bits/stdc++.h>
using namespace std;
const int oo = 1000000000;
const int N = 1010;
int r, c, cnt, now;
set<int> RR, CC;
char a[N][N];
int cover(int ar, int ac, int br, int bc) {
  int i;
  for (i = ar; i <= br; i++) {
    if (a[i][ac] == '.' || a[i][bc] == '.') return 0;
    if (a[i][ac] == '#') a[i][ac] = '@', now++;
    if (a[i][bc] == '#') a[i][bc] = '@', now++;
  }
  for (i = ac; i <= bc; i++) {
    if (a[ar][i] == '.' || a[br][i] == '.') return 0;
    if (a[ar][i] == '#') a[ar][i] = '@', now++;
    if (a[br][i] == '#') a[br][i] = '@', now++;
  }
  return 1;
}
void reset(int ar, int ac, int br, int bc) {
  int i;
  for (i = ar; i <= br; i++) {
    if (a[i][ac] == '@') a[i][ac] = '#', now--;
    if (a[i][bc] == '@') a[i][bc] = '#', now--;
  }
  for (i = ac; i <= bc; i++) {
    if (a[ar][i] == '@') a[ar][i] = '#', now--;
    if (a[br][i] == '@') a[br][i] = '#', now--;
  }
}
void solve() {
  int i, j;
  cnt = now = 0;
  scanf("%d%d", &r, &c);
  for (i = 0; i < r; i++) {
    scanf("%s", a[i]);
    for (j = 0; j < c; j++) {
      if (a[i][j] == '.') continue;
      if (j > 1)
        if (a[i][j - 1] == '#' && a[i][j - 2] == '#') RR.insert(i);
      if (i > 1)
        if (a[i - 1][j] == '#' && a[i - 2][j] == '#') CC.insert(j);
      cnt++;
    }
  }
  if (RR.size() > 4) RR.erase(++ ++RR.begin(), -- --RR.end());
  if (CC.size() > 4) CC.erase(++ ++CC.begin(), -- --CC.end());
  set<int>::iterator ar, ac, br, bc, xr, xc, yr, yc;
  for (ar = RR.begin(); ar != RR.end(); ar++)
    for (ac = CC.begin(); ac != CC.end(); ac++)
      for (br = RR.begin(); br != RR.end(); br++)
        for (bc = CC.begin(); bc != CC.end(); bc++)
          for (xr = RR.begin(); xr != RR.end(); xr++)
            for (xc = CC.begin(); xc != CC.end(); xc++)
              for (yr = RR.begin(); yr != RR.end(); yr++)
                for (yc = CC.begin(); yc != CC.end(); yc++) {
                  if (*br - *ar < 2 || *bc - *ac < 2 || *yr - *xr < 2 ||
                      *yc - *xc < 2)
                    continue;
                  if (cover(*ar, *ac, *br, *bc) && cover(*xr, *xc, *yr, *yc) &&
                      now == cnt) {
                    printf("YES\n");
                    printf("%d %d %d %d\n", *ar + 1, *ac + 1, *br + 1, *bc + 1);
                    printf("%d %d %d %d\n", *xr + 1, *xc + 1, *yr + 1, *yc + 1);
                    return;
                  }
                  reset(*ar, *ac, *br, *bc);
                  reset(*xr, *xc, *yr, *yc);
                }
  printf("NO\n");
}
int main() { solve(); }
