#include <bits/stdc++.h>
using namespace std;
const int N = 1e3 + 100;
int n, m, T, tot = 0;
char mp[N][N];
bool vis[N][N];
int num = 0;
bool check(int x1, int y1, int x2, int y2) {
  if (x2 - x1 < 2 || y2 - y1 < 2) return 0;
  for (int i = x1; i <= x2; i++) {
    if (i == x1 || i == x2) {
      for (int j = y1; j <= y2; j++) {
        if (mp[i][j] != '#') return 0;
        if (vis[i][j] == 0) ++num;
        vis[i][j] = 1;
      }
    } else {
      int j = y1;
      if (mp[i][j] != '#') return 0;
      if (vis[i][j] == 0) ++num;
      vis[i][j] = 1;
      j = y2;
      if (mp[i][j] != '#') return 0;
      if (vis[i][j] == 0) ++num;
      vis[i][j] = 1;
    }
  }
  return 1;
}
bool check_all(pair<int, int> l1, pair<int, int> r1, pair<int, int> l2,
               pair<int, int> r2) {
  num = 0;
  memset(vis, 0, sizeof vis);
  if (check(l1.first, l1.second, r1.first, r1.second) == 0) return 0;
  if (check(l2.first, l2.second, r2.first, r2.second) == 0) return 0;
  if (num != tot) return 0;
  return 1;
}
void out_put(pair<int, int> l1, pair<int, int> r1, pair<int, int> l2,
             pair<int, int> r2) {
  cout << "YES" << '\n';
  cout << l1.first << ' ' << l1.second << ' ' << r1.first << ' ' << r1.second
       << '\n';
  cout << l2.first << ' ' << l2.second << ' ' << r2.first << ' ' << r2.second
       << '\n';
}
pair<int, int> l2[7], r2[7], l1, r1;
int lnum = 0, rnum = 0;
bool chose[N][N];
signed main() {
  cin >> n >> m;
  for (int i = 1; i <= n; i++) {
    scanf("%s", mp[i] + 1);
    for (int j = 1; j <= m; j++) {
      if (mp[i][j] == '#') ++tot;
    }
  }
  for (int i = 1; i <= n; i++) {
    bool ok = 0;
    for (int j = 1; j <= m; j++) {
      if (mp[i][j] == '#') {
        l1.first = i;
        l1.second = j;
        ok = 1;
        break;
      }
    }
    if (ok) break;
  }
  for (int i = n; i >= 1; i--) {
    bool ok = 0;
    for (int j = m; j >= 1; j--) {
      if (mp[i][j] == '#') {
        r1.first = i;
        r1.second = j;
        ok = 1;
        break;
      }
    }
    if (ok) break;
  }
  if (l1 == r1) {
    {
      cout << "NO" << '\n';
      exit(0);
    };
  }
  for (int i = 1; i <= n; i++) {
    for (int j = 1; j <= m; j++) {
      pair<int, int> nw = pair<int, int>(i, j);
      bool ifok = 1;
      for (int k = 0; k <= 2; k++) {
        if (i + k > n || j + k > m) {
          ifok = 0;
          break;
        }
        if (mp[i + k][j] != '#' || mp[i][j + k] != '#') {
          ifok = 0;
          break;
        }
      }
      if (ifok && lnum < 3) {
        chose[i][j] = 1;
        l2[++lnum] = nw;
      }
    }
  }
  for (int j = 1; j <= m; j++) {
    for (int i = 1; i <= n; i++) {
      if (chose[i][j]) continue;
      pair<int, int> nw = pair<int, int>(i, j);
      bool ifok = 1;
      for (int k = 0; k <= 2; k++) {
        if (i + k > n || j + k > m) {
          ifok = 0;
          break;
        }
        if (mp[i + k][j] != '#' || mp[i][j + k] != '#') {
          ifok = 0;
          break;
        }
      }
      if (ifok && lnum < 6) {
        l2[++lnum] = nw;
      }
    }
  }
  memset(chose, 0, sizeof chose);
  for (int i = n; i >= 1; i--) {
    for (int j = m; j >= 1; j--) {
      pair<int, int> nw = pair<int, int>(i, j);
      bool ifok = 1;
      for (int k = 0; k <= 2; k++) {
        if (i - k < 1 || j - k < 1) {
          ifok = 0;
          break;
        }
        if (mp[i - k][j] != '#' || mp[i][j - k] != '#') {
          ifok = 0;
          break;
        }
      }
      if (ifok && rnum < 3) {
        chose[i][j] = 1;
        r2[++rnum] = nw;
      }
    }
  }
  for (int j = m; j >= 1; j--) {
    for (int i = n; i >= 1; i--) {
      if (chose[i][j]) continue;
      pair<int, int> nw = pair<int, int>(i, j);
      bool ifok = 1;
      for (int k = 0; k <= 2; k++) {
        if (i - k < 1 || j - k < 1) {
          ifok = 0;
          break;
        }
        if (mp[i - k][j] != '#' || mp[i][j - k] != '#') {
          ifok = 0;
          break;
        }
      }
      if (ifok && rnum < 6) {
        r2[++rnum] = nw;
      }
    }
  }
  pair<int, int> l3, r3;
  for (int i = 1; i <= lnum; i++) {
    for (int j = 1; j <= rnum; j++) {
      l3 = l2[i];
      r3 = r2[j];
      if (check_all(l1, r1, l3, r3)) {
        out_put(l1, r1, l3, r3);
        exit(0);
      }
      if (check_all(l1, r3, l3, r1)) {
        out_put(l1, r3, l3, r1);
        exit(0);
      }
    }
  }
  {
    cout << "NO" << '\n';
    exit(0);
  };
  return 0;
}
