import Queue nx = [(-1,0),(1,0),(0,-1),(0,1)] jx = [(-2,0),(2,0),(0,-2),(0,2)] h,w = map(int, raw_input().split()) sx,sy,gx,gy = map(int, raw_input().split()) mp = [map(int, list(raw_input())) for _ in range(h)] ls = [[True for _ in range(w)] for _ in range(h)] q = Queue.Queue() q.put((sx-1,sy-1)) ls[sx-1][sy-1] = False flg = False while not q.empty(): x,y = q.get() if x == gx-1 and y == gy-1: flg = True break; for dx,dy in nx: if 0 <= x+dx and x+dx < h and 0 <= y+dy and y+dy < w and ls[x+dx][y+dy] \ and abs(mp[x][y] - mp[x+dx][y+dy]) < 2: q.put((x+dx,y+dy)) ls[x+dx][y+dy] = False for dx,dy in jx: if 0 <= x+dx and x+dx < h and 0 <= y+dy and y+dy < w and ls[x+dx][y+dy] \ and mp[x][y] == mp[x+dx][y+dy] and mp[x+dx/2][y+dy/2] < mp[x][y]: q.put((x+dx,y+dy)) ls[x+dx][y+dy] = False if flg: print 'YES' else: print 'NO'