#include <bits/stdc++.h>
using namespace std;
const int MAXN = 2000 + 10, D = 2000000 + 10, MAXM = D * 2;
int n, m, f[MAXM], Nx, Ny;
vector<int> X[MAXM], Y[MAXM];
pair<int, pair<int, int> > first[MAXN], second[MAXN];
void Gen(vector<int> *X, pair<int, pair<int, int> > *first, int &Nx, int d) {
  for (int i = 0; i < MAXM; ++i)
    for (int j = 0; j < (int)X[i].size(); ++j)
      if (!j || X[i][j - 1] + d < X[i][j] - d)
        first[++Nx] = make_pair(i, make_pair(X[i][j] - d, X[i][j] + d));
      else
        first[Nx].second.second = X[i][j] + d;
  for (int i = 1; i <= Nx; ++i)
    first[i].second.first = max(first[i].second.first, 0),
    first[i].second.second = min(first[i].second.second, MAXM - 1);
}
bool cmp(const pair<int, pair<int, int> > &a,
         const pair<int, pair<int, int> > &b) {
  return a.second.second < b.second.second;
}
int lowbit(int first) { return first & -first; }
void Add(int first, int d) {
  for (; first < MAXM; f[first] += d, first += lowbit(first))
    ;
}
int Gets(int first) {
  int Tohka = 0;
  for (; first > 0; Tohka += f[first], first -= lowbit(first))
    ;
  return Tohka;
}
bool check(int d) {
  Nx = Ny = 0;
  Gen(X, first, Nx, d), Gen(Y, second, Ny, d);
  sort(second + 1, second + Ny + 1, cmp);
  memset(f, 0, sizeof(f));
  for (int i = 1; i < Nx; ++i) {
    queue<int> q;
    for (int j = 1; j <= Ny; ++j)
      if (first[i].second.first <= second[j].first &&
          second[j].first <= first[i].second.second &&
          second[j].second.first <= first[i].first &&
          first[i].first <= second[j].second.second)
        Add(second[j].first, 1), q.push(j);
    for (int j = i + 1; j <= Nx; ++j) {
      for (; !q.empty() && second[q.front()].second.second < first[j].first;
           Add(second[q.front()].first, -1), q.pop())
        ;
      if (Gets(first[j].second.second) - Gets(first[j].second.first - 1) >= 2)
        return true;
    }
    for (; !q.empty(); Add(second[q.front()].first, -1), q.pop())
      ;
  }
  return false;
}
int Find(int l, int r) {
  while (l <= r) {
    int mid = (l + r) / 2;
    if (check(mid * 2))
      r = mid - 1;
    else
      l = mid + 1;
  }
  return l;
}
int main() {
  scanf("%d%d", &n, &m);
  for (int i = 1; i <= n; ++i) {
    int first, second;
    scanf("%d%d", &first, &second);
    Y[first + second + D].push_back(first - second + D);
  }
  for (int i = 1; i <= m; ++i) {
    int first, second;
    scanf("%d%d", &first, &second);
    X[first - second + D].push_back(first + second + D);
  }
  for (int i = 0; i < MAXM; ++i)
    sort(X[i].begin(), X[i].end()), sort(Y[i].begin(), Y[i].end());
  int Tohka = Find(1, MAXM);
  if (Tohka > MAXM)
    puts("Poor Sereja!");
  else
    cout << Tohka << endl;
  fclose(stdin);
  fclose(stdout);
  return 0;
}
