#include <bits/stdc++.h>
using namespace std;
const int MAXN = 100;
int n, m;
char g[501][501];
char u[501][501];
int x, y, xt, yt;
int dx[] = {-1, 0, 1, 0};
int dy[] = {0, 1, 0, -1};
void dfs(int i, int j) {
  u[i][j] = 1;
  for (int k = 0; k < 4; k++) {
    int X = i + dx[k];
    int Y = j + dy[k];
    if (X >= 0 && Y >= 0 && X < n && Y < m) {
      if (!u[X][Y] && (g[X][Y] == '.' || (X == xt && Y == yt))) {
        dfs(X, Y);
      }
    }
  }
}
int main() {
  cin >> n >> m;
  getchar();
  for (int i = 0; i < n; i++) {
    gets(g[i]);
  }
  cin >> x >> y >> xt >> yt;
  y--;
  xt--;
  x--;
  yt--;
  dfs(x, y);
  g[x][y] = '.';
  if (xt == x && yt == y) {
    int kol = 0;
    for (int k = 0; k < 4; k++) {
      int X = xt + dx[k];
      int Y = yt + dy[k];
      if (X >= 0 && Y >= 0 && X < n && Y < m && g[X][Y] == '.') {
        kol++;
      }
    }
    if (kol >= 1) {
      cout << "YES";
      return 0;
    }
    cout << "NO";
    return 0;
  }
  if (g[xt][yt] == 'X' && u[xt][yt]) {
    cout << "YES";
    return 0;
  }
  if (g[xt][yt] == '.' && u[xt][yt]) {
    int kol = 0;
    for (int k = 0; k < 4; k++) {
      int X = xt + dx[k];
      int Y = yt + dy[k];
      if (X >= 0 && Y >= 0 && X < n && Y < m && g[X][Y] == '.') {
        kol++;
      }
    }
    if (kol >= 2) {
      cout << "YES";
      return 0;
    }
    cout << "NO";
    return 0;
  }
  cout << "NO";
  return 0;
}
