import java.io.BufferedReader; import java.io.InputStreamReader; import java.util.ArrayList; import java.util.Arrays; import java.util.List; public class Main { public static void main(String[] args) throws Exception { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String[] sa = br.readLine().split(" "); int n = Integer.parseInt(sa[0]); int m = Integer.parseInt(sa[1]); sa = br.readLine().split(" "); int[] h = new int[n]; for (int i = 0; i < n; i++) { h[i] = Integer.parseInt(sa[i]); } List> listL = new ArrayList<>(n); List> listR = new ArrayList<>(n); for (int i = 0; i < n; i++) { listL.add(new ArrayList<>()); listR.add(new ArrayList<>()); } for (int i = 0; i < m; i++) { sa = br.readLine().split(" "); int x = Integer.parseInt(sa[0]) - 1; int y = Integer.parseInt(sa[1]) - 1; listL.get(x).add(y); listR.get(y).add(x); } br.close(); long[] dplu = new long[n]; long[] dpld = new long[n]; long[] dpru = new long[n]; long[] dprd = new long[n]; Arrays.fill(dplu, -1); Arrays.fill(dpld, -1); Arrays.fill(dpru, -1); Arrays.fill(dprd, -1); dpld[0] = 0; dprd[n - 1] = 0; for (int i = 0; i < n - 1; i++) { if (dpld[i] != -1) { for (int j : listL.get(i)) { if (h[i] < h[j]) { dplu[j] = Math.max(dplu[j], dpld[i] + h[j] - h[i]); } else { dpld[j] = Math.max(dpld[j], dpld[i]); } } } if (dplu[i] != -1) { for (int j : listL.get(i)) { if (h[i] > h[j]) { dpld[j] = Math.max(dpld[j], dplu[i]); } } } } for (int i = n - 1; i > 0; i--) { if (dprd[i] != -1) { for (int j : listR.get(i)) { if (h[i] < h[j]) { dpru[j] = Math.max(dpru[j], dprd[i] + h[j] - h[i]); } else { dprd[j] = Math.max(dprd[j], dprd[i]); } } } if (dpru[i] != -1) { for (int j : listR.get(i)) { if (h[i] > h[j]) { dprd[j] = Math.max(dprd[j], dpru[i]); } } } } System.out.println(Math.max(dplu[n - 1], dpld[n - 1])); System.out.println(Math.max(dpru[0], dprd[0])); } }