#!/usr/bin/env python #coding:utf8 import sys sys.setrecursionlimit(3000) def read(): row, col = map(int, raw_input().split()) sr, sc, gr, gc = map(int, raw_input().split()) sr -= 1 sc -= 1 gr -= 1 gc -= 1 b = [] for i in range(row): b.append(map(int, raw_input())) return row, col, sr, sc, gr, gc, b def dfs(r, c, visited, gr, gc, b): if r == gr and c == gc: return True visited[r][c] = True for dr, dc in [(-1, 0), (0, 1), (1, 0), (0, -1)]: nr = r + dr nc = c + dc nr2 = r + dr * 2 nc2 = c + dc * 2 if (0 <= nr < len(visited) and 0 <= nc < len(visited[0])) and \ not visited[nr][nc] and \ abs(b[nr][nc] - b[r][c]) <= 1 and dfs(nr, nc, visited, gr, gc, b): return True if (0 <= nr2 < len(visited) and 0 <= nc2 < len(visited[0])) and \ not visited[nr2][nc2] and \ b[nr][nc] <= b[r][c] and b[nr2][nc2] == b[r][c] and dfs(nr2, nc2, visited, gr, gc, b): return True return False def work((row, col, sr, sc, gr, gc, b)): visited = [[False for c in range(col)] for r in range(row)] if dfs(sr, sc, visited, gr, gc, b): print "YES" else: print "NO" if __name__ == "__main__": work(read())