#include <bits/stdc++.h>
using namespace std;
int read() {
  int x = 0, f = 1;
  char ch = getchar();
  while (!isdigit(ch)) {
    if (ch == '-') f = -1;
    ch = getchar();
  }
  while (isdigit(ch)) {
    x = x * 10 + ch - '0';
    ch = getchar();
  }
  return x * f;
}
map<int, int> mp;
int n, m, a[200500];
long long inv6, ss = 0;
long long p(long long x, long long y) {
  long long ans = 1;
  while (y) {
    if (y & 1) ans = ans * x % m;
    x = x * x % m;
    y /= 2;
  }
  return ans;
}
int get(int a, int d) {
  int ans = ((2 * n - 1LL) * d) % m;
  ans = (1LL * ans * d) % m;
  ans = (1LL * ans * inv6) % m;
  ans = (1LL * ans + 1LL * a * d) % m;
  ans = (1LL * ans * (n - 1LL)) % m;
  ans = (1LL * ans + 1LL * a * a) % m;
  ans = (1LL * ans * n) % m;
  return (ans == ss);
}
int main() {
  m = read();
  n = read();
  int s = 0;
  for (int i = 1; i <= n; i++)
    a[i] = read(), s = (s + a[i]) % m, ss = (ss + 1LL * a[i] * a[i] % m) % m,
    mp[a[i]]++;
  sort(a + 1, a + 1 + n);
  if (n == 1) {
    printf("%d 1", a[1]);
    return 0;
  }
  if (n == m) {
    puts("0 1");
    return 0;
  }
  long long invn = p(1LL * n, 1LL * (m - 2)),
            invnn = p(1LL * (n - 1), 1ll * (m - 2));
  inv6 = p(6LL, 1LL * (m - 2));
  int flag = 0;
  for (int i = 1; i <= n; i++) {
    int d = (int)(2LL * s * invn % m - 2LL * a[i] + 2LL * m) * invnn % m;
    if (!get(a[i], d)) continue;
    if (d == 0) continue;
    int fi, snow = a[i], now = a[i], sum = 1;
    while (1) {
      now = (now - d + m) % m;
      if (mp[now])
        sum++;
      else {
        fi = (now + d) % m;
        break;
      }
    }
    now = snow;
    while (1) {
      now = (now + d) % m;
      if (mp[now])
        sum++;
      else
        break;
    }
    if (sum == n) {
      printf("%d %d\n", fi, d), flag = 1;
      break;
    };
  }
  if (!flag) puts("-1");
  return 0;
}
