#include <bits/stdc++.h>
using namespace std;
const int maxn = 100005;
long long m, n, a[maxn], s0, s1, b[maxn];
inline long long ksm(long long x, long long n) {
  long long ret = 1;
  while (n) {
    if (n & 1) ret = ret * x % m;
    n >>= 1;
    x = x * x % m;
  }
  return ret;
}
inline void solve() {
  if (n == m) {
    puts("0 1");
    return;
  }
  if (n == 1) {
    printf("%I64d 0\n", a[0]);
    return;
  }
  sort(a, a + n);
  for (int i = 1; i < n; ++i) {
    long long d = ((a[i] - a[0]) % m + m) % m;
    long long a1 =
        ((s0 - n * (n - 1) / 2 % m * d % m) % m + m) % m * ksm(n, m - 2) % m;
    long long t =
        (n * a1 % m * a1 % m +
         n * (n - 1) % m * (2 * n - 1) % m * d % m * d % m * ksm(6, m - 2) % m +
         n * (n - 1) % m * d % m * a1 % m) %
        m;
    if (t == s1) {
      b[0] = a1;
      for (int j = 1; j < n; ++j) (b[j] = b[j - 1] + d) %= m;
      sort(b, b + n);
      bool flag = false;
      for (int j = 0; j < n; ++j)
        if (a[j] != b[j]) flag = true;
      if (!flag) {
        printf("%I64d %I64d\n", a1, d);
        return;
      }
    }
  }
  puts("-1");
}
int main() {
  scanf("%I64d%I64d", &m, &n);
  for (int i = 0; i < n; ++i) {
    scanf("%I64d", &a[i]);
    (s0 += a[i]) %= m;
    (s1 += a[i] * a[i]) %= m;
  }
  solve();
  return 0;
}
