#include <bits/stdc++.h>
using namespace std;
int h, w;
void paint(bitset<400>& s, int y1, int y2, int x1, int x2) {
  for (int i = y1; i <= y2; ++i) s[i * w + x1] = s[i * w + x2] = true;
  for (int i = x1; i <= x2; ++i) s[y1 * w + i] = s[y2 * w + i] = true;
}
int main() {
  cin >> h >> w;
  vector<string> s(h);
  for (int i = 0; i < h; ++i) cin >> s[i];
  vector<bool> checkY(h, true), checkX(w, true);
  int tmp = 0;
  for (int i = 1; i < h; ++i) {
    if (s[i] == s[i - 1]) {
      ++tmp;
      if (tmp >= 5) checkY[i - 1] = false;
    } else {
      tmp = 0;
    }
  }
  tmp = 0;
  for (int i = 1; i < w; ++i) {
    bool same = true;
    for (int j = 0; j < h; ++j) {
      if (s[j][i] != s[j][i - 1]) same = false;
    }
    if (same) {
      ++tmp;
      if (tmp >= 5) checkX[i - 1] = false;
    } else {
      tmp = 0;
    }
  }
  for (int i = 0; i < h; ++i) {
    if (s[i] == string(w, '.'))
      checkY[i] = false;
    else
      break;
  }
  for (int i = h - 1; i >= 0; --i) {
    if (s[i] == string(w, '.'))
      checkY[i] = false;
    else
      break;
  }
  for (int i = 0; i < w; ++i) {
    bool remove = true;
    for (int j = 0; j < h; ++j) {
      if (s[j][i] == '#') remove = false;
    }
    if (remove)
      checkX[i] = false;
    else
      break;
  }
  for (int i = w - 1; i >= 0; --i) {
    bool remove = true;
    for (int j = 0; j < h; ++j) {
      if (s[j][i] == '#') remove = false;
    }
    if (remove)
      checkX[i] = false;
    else
      break;
  }
  bitset<400> bs;
  int k = 0;
  for (int i = 0; i < h; ++i) {
    if (!checkY[i]) continue;
    for (int j = 0; j < w; ++j) {
      if (checkX[j]) {
        if (k >= 400) {
          cout << "NO" << endl;
          return 0;
        }
        bs[k] = (s[i][j] == '#');
        ++k;
      }
    }
  }
  vector<int> originalY, originalX;
  for (int i = 0; i < h; ++i) {
    if (checkY[i]) originalY.push_back(i + 1);
  }
  for (int i = 0; i < w; ++i) {
    if (checkX[i]) originalX.push_back(i + 1);
  }
  h = originalY.size();
  w = originalX.size();
  if (h >= 20 || w >= 20) {
    cout << "NO" << endl;
    return 0;
  }
  int y1 = 0;
  for (int y2 = 2; y2 < h; ++y2) {
    for (int y3 = 0; y3 < h; ++y3) {
      for (int y4 = y3 + 2; y4 < h; ++y4) {
        if (y2 != h - 1) y4 = h - 1;
        for (int x1 = 0; x1 < w; ++x1) {
          for (int x3 = 0; x3 < w; ++x3) {
            if (x1 != 0 && x3 != 0) break;
            for (int x2 = x1 + 2; x2 < w; ++x2) {
              for (int x4 = x3 + 2; x4 < w; ++x4) {
                if (x2 != w - 1) x4 = w - 1;
                bitset<400> bs1;
                paint(bs1, y1, y2, x1, x2);
                paint(bs1, y3, y4, x3, x4);
                if (bs1 == bs) {
                  cout << "YES" << endl;
                  cout << originalY[y1] << ' ' << originalX[x1] << ' '
                       << originalY[y2] << ' ' << originalX[x2] << endl;
                  cout << originalY[y3] << ' ' << originalX[x3] << ' '
                       << originalY[y4] << ' ' << originalX[x4] << endl;
                  return 0;
                }
              }
            }
          }
        }
      }
    }
  }
  cout << "NO" << endl;
  return 0;
}
