#include <bits/stdc++.h>
using namespace std;
long long s[2];
int a[100005], b[100005];
long long n, mo;
multiset<int> p;
long long mul(long long x, long long y) {
  long long ret = 1;
  while (y) {
    if (y % 2) ret = ret * x % mo;
    x = x * x % mo;
    y /= 2;
  }
  return ret;
}
int main() {
  scanf("%I64d%I64d", &mo, &n);
  for (int i = 1; i <= n; i++) {
    scanf("%d", &a[i]);
    p.insert(a[i]);
    s[0] = (s[0] + a[i]) % mo;
    s[1] = (s[1] + 1ll * a[i] * a[i]) % mo;
  }
  sort(a + 1, a + n + 1);
  if (n == 1) {
    printf("%d 0", a[1]);
    return 0;
  }
  for (int i = 2; i <= n; i++) {
    long long d = a[i] - a[1];
    long long a1 = (s[0] - 1ll * n * (n - 1) / 2 % mo * d % mo + mo) % mo;
    a1 = a1 * mul(n, mo - 2) % mo;
    long long aa1 = a1;
    if (p.find(a1) == p.end()) continue;
    long long sum = n * a1 % mo * a1 % mo + n * (n - 1) % mo * (2 * n - 1) %
                                                mo * d % mo * d % mo *
                                                mul(6, mo - 2) % mo;
    sum = (sum + n * (n - 1) % mo * d % mo * a1 % mo) % mo;
    if (sum != s[1]) continue;
    for (int j = 1; j <= n; j++) {
      b[j] = a1;
      a1 = (a1 + d) % mo;
    }
    sort(b + 1, b + n + 1);
    bool ok = 1;
    for (int j = 1; j <= n; j++)
      if (a[j] != b[j]) {
        ok = 0;
        break;
      }
    if (ok) {
      printf("%I64d %I64d", aa1, d);
      return 0;
    }
  }
  puts("-1");
  return 0;
}
