#include <bits/stdc++.h>
using namespace std;
const int MAXN = 1e5 + 10;
int m, n;
int a[MAXN];
int vis[2 * MAXN];
map<int, int> q;
int main(int argc, const char* argv[]) {
  scanf("%d", &(m));
  scanf("%d", &(n));
  if (n > 5000 && m - n < 5000 && m - n > 2) {
    for (int i = 1; i <= n; i++) {
      scanf("%d", &(a[i]));
      vis[a[i]] = 1;
    }
    sort(a + 1, a + 1 + n);
    int jj = 1;
    for (int i = 0; i <= m - 1; i++) {
      if (!vis[i]) {
        a[jj++] = i;
        q.insert(make_pair(i, 1));
      }
    }
    for (int i = 2; i <= m - n; i++) {
      int t = a[i] - a[1];
      int nextt = a[i];
      auto it = q.find(a[i]);
      it->second = i;
      int count = 2;
      int ans = a[i];
      while (count < m - n) {
        int temp = (nextt + t) % m;
        if (q.count(temp) == 0) {
          break;
        }
        auto it2 = q.find(temp);
        if (it2->second == i) {
          break;
        }
        it2->second = i;
        nextt = temp;
        ans = temp;
        count++;
      }
      if (count == m - n) {
        printf("%d %d\n", (ans + t) % m, t);
        return 0;
      }
      nextt = a[1];
      while (count < m - n) {
        int temp = (nextt - t + m) % m;
        if (q.count(temp) == 0) {
          break;
        }
        auto it2 = q.find(temp);
        if (it2->second == i) {
          break;
        }
        it2->second = i;
        nextt = temp;
        count++;
      }
      if (count == m - n) {
        printf("%d %d\n", (ans + t) % m, t);
        return 0;
      }
    }
  } else {
    for (int i = 1; i <= n; i++) {
      scanf("%d", &(a[i]));
      q.insert(make_pair(a[i], 1));
    }
    sort(a + 1, a + 1 + n);
    if (n == 1) {
      printf("%d 1\n", a[1]);
      return 0;
    }
    for (int i = 2; i <= n; i++) {
      int t = a[i] - a[1];
      int nextt = a[i];
      auto it = q.find(a[i]);
      it->second = i;
      int count = 2;
      while (count < n) {
        int temp = (nextt + t) % m;
        if (q.count(temp) == 0) {
          break;
        }
        auto it2 = q.find(temp);
        if (it2->second == i) {
          break;
        }
        it2->second = i;
        nextt = temp;
        count++;
      }
      if (count == n) {
        printf("%d %d\n", a[1], t);
        return 0;
      }
      nextt = a[1];
      int ans = 0;
      while (count < n) {
        int temp = (nextt - t + m) % m;
        if (q.count(temp) == 0) {
          break;
        }
        auto it2 = q.find(temp);
        if (it2->second == i) {
          break;
        }
        it2->second = i;
        nextt = temp;
        ans = temp;
        count++;
      }
      if (count == n) {
        printf("%d %d\n", ans, t);
        return 0;
      }
    }
  }
  printf("-1\n");
  return 0;
}
