#include <bits/stdc++.h>
using namespace std;
int MOD = 1e9 + 7;
const int SIZE = 1e6 + 10;
void wrong() {
  puts("-1");
  exit(0);
}
long long mypow(long long x, long long y) {
  x %= MOD;
  long long res = 1 % MOD;
  while (y) {
    if (y & 1) res = res * x % MOD;
    y >>= 1;
    x = x * x % MOD;
  }
  return res;
}
int a[SIZE];
int main() {
  int m, n;
  scanf("%d%d", &m, &n);
  MOD = m;
  long long sum = 0;
  for (int i = 0; i < (n); ++i) {
    scanf("%d", &(a[i]));
    sum += a[i];
  }
  sort(a, a + n);
  if (n == 1) {
    printf("%d 0\n", a[0]);
    return 0;
  }
  if (n == m) {
    printf("0 1\n");
    return 0;
  }
  long long med = sum % MOD;
  med = med * mypow(n, MOD - 2) % MOD;
  if (n % 2 == 1) {
    if (!binary_search(a, a + n, med)) wrong();
  } else {
    if (binary_search(a, a + n, med)) wrong();
  }
  for (int i = 0; i < (n); ++i) {
    if (!binary_search(a, a + n, (int)((med * 2 - a[i] + m) % m))) wrong();
  }
  int half_n = n / 2;
  for (int i = 0; i < (n); ++i) {
    int another = lower_bound(a, a + n, (int)((med * 2 - a[i] + m) % m)) - a;
    if (another <= i) continue;
    int dif = (a[another] - a[i] + MOD) * mypow(n - 1, MOD - 2) % MOD;
    int lt_v = (a[i] - dif);
    if (lt_v < 0) lt_v += MOD;
    if (binary_search(a, a + n, lt_v)) continue;
    bool suc = 1;
    int now = a[i];
    for (int j = (1); j < (half_n); ++j) {
      now += dif;
      if (now >= MOD) now -= MOD;
      if (!binary_search(a, a + n, now)) {
        suc = 0;
        break;
      }
    }
    if (suc) {
      printf("%d %d\n", a[i], dif);
      return 0;
    }
  }
  return 0 * puts("-1");
}
