function add(idx1, idx2) local node1, node2 = nodes[idx1], nodes[idx2] local val1, val2 = node1["val"], node2["val"] local cnt = node1["count"] if(val1 == val2) then return false end if(1 <= cnt and val2 == nodes[node1[1]]["val"]) then return false end if(2 <= cnt and val2 == nodes[node1[2]]["val"]) then return false end if(cnt == 2) then return true end if(cnt == 1) then node1[2], node1["count"] = idx2, 2 else node1[1], node1["count"] = idx2, 1 end return false end n, m = io.read("*n", "*n") nodes = {} for i = 1, n do t = {} t["val"] = io.read("*n") t["count"] = 0 nodes[i] = t end found = false for i = 1, m do a, b = io.read("*n", "*n") found = add(a, b) if(found) then break end found = add(b, a) if(found) then break end end if(not found) then for i = 1, n do t = nodes[i] cnt = t["count"] if(t["count"] == 2) then v = t["val"] v1t, v2t = nodes[t[1]], nodes[t[2]] v1, v2 = v1t["val"], v2t["val"] if(((v1 < v and v2 < v) or (v < v1 and v < v2)) and (v1 ~= v2)) then found = true break end end end end print (found and "YES" or "NO")