import java.util.ArrayDeque; import java.util.Arrays; import java.util.Scanner; class Main { static int N; static int M; static int[][] E; public static void main(String[] args) { Scanner sc = new Scanner(System.in); N = sc.nextInt(); M = sc.nextInt(); E = new int[M][N]; for (int i = 0; i < M; ++i) { for (int j = 0; j < N; ++j) { E[i][j] = sc.nextInt(); } } double[] expectedValue = new double[M]; for (int m = 0; m < M; ++m) { RMQ max = new RMQ(N); RMQ min = new RMQ(N); for (int i = 0; i < N; ++i) { max.setVal(i, E[m][i]); min.setVal(i, -E[m][i]); } for (int i = 0; i < N; ++i) { for (int j = i + 1; j < N; ++j) { double e = 0; int maxV = max.query(i, j + 1); int minV = -min.query(i, j + 1); if (maxV > Math.max(E[m][i], E[m][j])) { e = Math.max(e, maxV); } if (minV < Math.min(E[m][i], E[m][j])) { e = Math.min(e, minV); } expectedValue[m] += e; } } } int ans = 0; for (int m = 1; m < M; ++m) { if (expectedValue[ans] < expectedValue[m]) { ans = m; } } System.out.println(ans); } static class RMQ { int n = 1; int[] val; public RMQ(int n_) { while (n < n_) n *= 2; val = new int[2 * n - 1]; Arrays.fill(val, -1); } void setVal(int k, int v) { k += n - 1; val[k] = v; while (k > 0) { k = (k - 1) / 2; val[k] = Math.max(val[2 * k + 1], val[2 * k + 2]); } } int query(int a, int b) { return query(a, b, 0, n, 0); } int query(int a, int b, int l, int r, int k) { if (b <= l || a >= r) { return -Integer.MAX_VALUE / 10; } else if (a <= l && r <= b) { return val[k]; } else { int vl = query(a, b, l, (l + r) / 2, 2 * k + 1); int vr = query(a, b, (l + r) / 2, r, 2 * k + 2); return Math.max(vl, vr); } } } static void tr(Object... objects) { System.out.println(Arrays.deepToString(objects)); } }