#include <bits/stdc++.h>
using namespace std;
const int N = 1e5;
long long dmod(long long x, long long MOD) { return x % MOD; }
long long m;
long long fe(long long x, long long p) {
  if (p == 0) return 1;
  long long ret = fe(x, p / 2);
  ret = dmod(ret * ret, m);
  if (p & 1) ret = dmod(ret * x, m);
  return ret;
}
int n;
long long li[N + 5];
set<long long> ada;
long long get_count(long long x) {
  long long ret = 0;
  for (int i = 1; i <= n; i++) {
    long long cur = (li[i] + x) % m;
    if (ada.find(cur) != ada.end()) ret++;
  }
  return ret;
}
bool proc() {
  if (2 * n < m) return 0;
  set<long long> tmp;
  long long cur = 0;
  for (int i = 1; i <= n; i++) {
    while (cur != li[i]) tmp.insert(cur++);
    cur++;
  }
  while (cur != m) tmp.insert(cur++);
  int id = 0;
  for (auto x : tmp) {
    id++;
    li[id] = x;
  }
  n = id;
  return 1;
}
int main() {
  scanf("%d%d", &m, &n);
  for (int i = 1; i <= n; i++) scanf("%lld", &li[i]);
  if (n == 1) {
    printf("%lld 0\n", li[1]);
    return 0;
  } else if (m == 2 || n == m) {
    printf("0 1\n");
    return 0;
  } else if (n == m - 1) {
    sort(li + 1, li + n + 1);
    for (int i = 1; i <= n; i++) {
      if (li[i] != (i - 1)) {
        printf("%d 1\n", i);
        return 0;
      }
    }
    printf("0 1\n");
    return 0;
  }
  sort(li + 1, li + n + 1);
  bool tukar = proc();
  for (int i = 1; i <= n; i++) ada.insert(li[i]);
  long long dif = li[2] - li[1];
  long long cnt = get_count(dif);
  long long inv = fe(n - cnt, m - 2);
  dif = dmod(dif * inv, m);
  deque<long long> dq;
  dq.push_front(li[1]);
  while (1) {
    long long now = dq.front();
    now = dmod(now - dif + m, m);
    if (ada.find(now) != ada.end())
      dq.push_front(now);
    else
      break;
  }
  while (1) {
    long long now = dq.back();
    now = dmod(now + dif, m);
    if (ada.find(now) != ada.end())
      dq.push_back(now);
    else
      break;
  }
  if (dq.size() != n) {
    printf("-1\n");
    return 0;
  }
  if (tukar) {
    printf("%lld %lld\n", dmod(dq.back() + dif, m), dif);
  } else {
    printf("%lld %lld\n", dq.front(), dif);
  }
  return 0;
}
