#include <iostream>
using namespace std;
int n, m;
char mp[41][41];
bool vis[41][41];
int sx, sy, fx, fy;
bool flag = false;
int dir[4][2] = {0, 1, 1, 0, 0, -1, -1, 0};
bool check(int x, int y){
return x >= 0 && x < n && y >= 0 && y < m && mp[x][y] == '.' && !vis[x][y];
}
void dfs(int x, int y){
if (x == fx && y == fy){
flag = true;
return;
}
vis[x][y] = true;
for (int i = 0; i < 4; i++){
int nx = x + dir[i][0];
int ny = y + dir[i][1];
if (check(nx, ny)){
dfs(nx, ny);
}
}
}
int main() {
cin >> n >> m;
cin >> sx >> sy >> fx >> fy;
sx--; sy--; fx--; fy--; // 调整为从0开始的索引
for (int i = 0; i < n; i++){
for (int j = 0; j < m; j++){
cin >> mp[i][j];
}
}
dfs(sx, sy);
if (flag){
cout << "YES" << endl;
} else {
cout << "NO" << endl;
}
return 0;
}