#include <bits/stdc++.h>
using namespace std;
long long mod = 1000000007LL;
long long base = 37;
long long large = 1000000000000000000LL;
void gcdE(long long a, long long b, long long& d, long long& x, long long& y) {
  if (!b) {
    d = a;
    x = 1;
    y = 0;
  } else {
    gcdE(b, a % b, d, y, x);
    y -= x * (a / b);
  }
}
long long inv(long long a, long long n) {
  long long d, x, y;
  gcdE(a, n, d, x, y);
  return d == 1 ? (x + n) % n : -1;
}
int main() {
  int n;
  cin >> mod >> n;
  vector<long long> a(n, 0);
  for (int i = 0; i < n; i++) {
    cin >> a[i];
  }
  if (n == 1) {
    cout << a[0] << " " << 1 << endl;
    return 0;
  }
  if (n == mod) {
    cout << 0 << " " << 1 << endl;
    return 0;
  }
  sort(a.begin(), a.end());
  if (2LL * (n - 1) < mod) {
    long long g = a[1] - a[0];
    long long cnt = 0;
    for (int i = 0; i < n; i++) {
      cnt += 1LL * (upper_bound(a.begin(), a.end(), (a[i] + g) % mod) -
                    lower_bound(a.begin(), a.end(), (a[i] + g) % mod));
    }
    long long k = n - cnt;
    long long d = (1LL * g * inv(k, mod)) % mod;
    set<long long> s;
    for (int i = 0; i < n; i++) s.insert(a[i]);
    long long p = a[0];
    cnt = 0;
    while (s.find(p) != s.end()) {
      cnt++;
      s.erase(p);
      p += d;
      p %= mod;
    }
    long long base = a[0];
    p = a[0] + mod - d;
    p %= mod;
    while (s.find(p) != s.end()) {
      cnt++;
      s.erase(p);
      base = p;
      p += mod - d;
      p %= mod;
    }
    if (cnt == 1LL * n) {
      cout << base << " " << d << endl;
    } else {
      cout << -1 << endl;
      return 0;
    }
  } else {
    vector<bool> h(mod, true);
    for (int i = 0; i < n; i++) h[a[i]] = false;
    vector<long long> b = a;
    a.clear();
    for (int i = 0; i < mod; i++)
      if (h[i]) a.push_back(1LL * i);
    int n = (int)a.size();
    if (n == 1) {
      cout << a[0] + 1 << " " << 1 << endl;
      return 0;
    }
    long long g = a[1] - a[0];
    long long cnt = 0;
    for (int i = 0; i < n; i++) {
      cnt += 1LL * (upper_bound(a.begin(), a.end(), (a[i] + g) % mod) -
                    lower_bound(a.begin(), a.end(), (a[i] + g) % mod));
    }
    long long k = n - cnt;
    long long d = (1LL * g * inv(k, mod)) % mod;
    set<long long> s;
    for (int i = 0; i < n; i++) s.insert(a[i]);
    long long p = a[0];
    cnt = 0;
    long long base = a[0];
    while (s.find(p) != s.end()) {
      cnt++;
      s.erase(p);
      p += d;
      p %= mod;
      base = p;
    }
    p = a[0] + mod - d;
    p %= mod;
    while (s.find(p) != s.end()) {
      cnt++;
      s.erase(p);
      p += mod - d;
      p %= mod;
    }
    if (cnt == 1LL * n) {
      cout << base << " " << d << endl;
    } else {
      cout << -1 << endl;
      return 0;
    }
  }
  return 0;
}
