#include <bits/stdc++.h>
long long inv(int a, int p) {
  return a == 1 ? 1 : (1 + p * (a - inv(p % a, a))) / a % p;
}
int m, n, a[100010], d0[100010], d1[100010], to[100010], deg[100010];
bool vis[200010];
int main() {
  scanf("%d%d", &m, &n);
  for (int i = 0; i < n; i++) scanf("%d", a + i);
  if (n == 1 || n == m) {
    printf("%d 1\n", a[0]);
    return 0;
  }
  bool fl = 0;
  if (m < 2 * n) {
    for (int i = 0; i < n; i++) vis[a[i]] = 1;
    n = 0;
    for (int i = 0; i < m; i++)
      if (!vis[i]) a[n++] = i;
    fl = 1;
    if (n == 1) {
      printf("%d 1\n", (a[0] + 1) % m);
      return 0;
    }
  }
  for (int i = 0; i < n; i++) {
    d0[i] = (a[i] - a[0] + m) % m;
    d1[i] = (a[i] - a[1] + m) % m;
  }
  std::sort(d0, d0 + n);
  std::sort(d1, d1 + n);
  int p0 = 0, p1 = 0, dis = n;
  while (p0 < n && p1 < n) {
    if (d0[p0] < d1[p1])
      p0++;
    else if (d0[p0] > d1[p1])
      p1++;
    else
      dis--, p0++, p1++;
  }
  if (!dis) {
    puts("-1");
    return 0;
  }
  int d = (a[0] - a[1] + m) * inv(dis, m) % m;
  std::sort(a, a + n);
  for (int i = 0; i < n; i++) {
    int j = std::lower_bound(a, a + n, (a[i] + d) % m) - a;
    if (j < n && a[j] == (a[i] + d) % m) {
      to[i] = j;
      deg[j]++;
    } else
      to[i] = -1;
  }
  for (int i = 0; i < n; i++)
    if (!deg[i]) {
      int j = i, tot = 1;
      while (to[j] != -1) j = to[j], tot++;
      if (tot != n) {
        puts("-1");
        return 0;
      }
      if (fl) a[i] = (a[i] + 1ll * n * d) % m;
      printf("%d %d\n", a[i], d);
      return 0;
    }
  puts("-1");
  return 0;
}
