#include <bits/stdc++.h>
using namespace std;
int main() {
  int n, m, i, j, brojac;
  bool ok;
  pair<int, int> pocetok, kraj, par;
  char niza[501][501];
  queue<pair<int, int> > kju;
  cin >> n >> m;
  for (i = 0; i < n; i++) {
    for (j = 0; j < m; j++) {
      cin >> niza[i][j];
    }
  }
  cin >> pocetok.first >> pocetok.second;
  cin >> kraj.first >> kraj.second;
  pocetok.first--;
  pocetok.second--;
  kraj.first--;
  kraj.second--;
  ok = false;
  if (niza[kraj.first][kraj.second] == 'X') ok = true;
  i = kraj.first;
  j = kraj.second;
  brojac = 0;
  niza[kraj.first][kraj.second] = '.';
  niza[pocetok.first][pocetok.second] = '.';
  if ((i > 0) && (niza[i - 1][j] == '.')) brojac++;
  if ((i < n - 1) && (niza[i + 1][j] == '.')) brojac++;
  if ((j > 0) && (niza[i][j - 1] == '.')) brojac++;
  if ((j < m - 1) && (niza[i][j + 1] == '.')) brojac++;
  if ((ok == false) && (brojac < 2)) {
    cout << "NO";
    return 0;
  }
  if ((pocetok == kraj) && (brojac == 0)) {
    cout << "NO";
    return 0;
  }
  kju.push(pocetok);
  while (!kju.empty()) {
    par = kju.front();
    kju.pop();
    i = par.first;
    j = par.second;
    if ((i == kraj.first) && (j == kraj.second)) {
      cout << "YES";
      return 0;
    }
    if ((i > 0) && (niza[i - 1][j] == '.')) {
      par.first = i - 1;
      par.second = j;
      kju.push(par);
      niza[i - 1][j] = 'X';
    }
    if ((i < n - 1) && (niza[i + 1][j] == '.')) {
      par.first = i + 1;
      par.second = j;
      kju.push(par);
      niza[i + 1][j] = 'X';
    }
    if ((j > 0) && (niza[i][j - 1] == '.')) {
      par.first = i;
      par.second = j - 1;
      kju.push(par);
      niza[i][j - 1] = 'X';
    }
    if ((j < m - 1) && (niza[i][j + 1] == '.')) {
      par.first = i;
      par.second = j + 1;
      kju.push(par);
      niza[i][j + 1] = 'X';
    }
  }
  cout << "NO";
  return 0;
}
