#include <bits/stdc++.h>
using namespace std;
struct pt {
  long long x, y;
};
vector<pair<long long, long long> > v[2][2005];
int seen[2][2005];
bool good;
int done[2];
void dfs(int p, int at, int f1, int f2) {
  seen[p][at] = 1;
  done[p] = 1;
  for (auto it : v[p][at]) {
    if (!(it.first == f1 && it.second == f2)) {
      if (seen[it.first][it.second] == 1) {
        if (done[1] && done[0]) good = 1;
      } else if (seen[it.first][it.second] == 0)
        dfs(it.first, it.second, p, at);
    }
  }
  seen[p][at] = 2;
}
pt blue[2005];
pt red[2005];
int main() {
  int n, m;
  scanf("%d %d", &n, &m);
  set<int> s;
  for (auto(i) = (0); (i) < (n); (i)++) {
    int x, y;
    scanf("%d %d", &x, &y);
    blue[i].x = x;
    blue[i].y = y;
    s.insert(x + y);
  }
  if ((long long)s.size() == 1) {
    puts("Poor Sereja!");
    return 0;
  }
  s.clear();
  for (auto(i) = (0); (i) < (m); (i)++) {
    long long x, y;
    scanf("%lld %lld", &x, &y);
    red[i].x = x;
    red[i].y = y;
    s.insert(x - y);
  }
  if ((long long)s.size() == 1) {
    puts("Poor Sereja!");
    return 0;
  }
  long long lo = 1, hi = 10000000;
  while (lo < hi) {
    long long mi = lo + hi;
    mi /= 2;
    for (auto(i) = (0); (i) < (n); (i)++) v[0][i].clear();
    for (auto(j) = (0); (j) < (m); (j)++) v[1][j].clear();
    for (auto(i) = (0); (i) < (n); (i)++) seen[0][i] = 0;
    for (auto(j) = (0); (j) < (m); (j)++) seen[1][j] = 0;
    for (auto(i) = (0); (i) < (n); (i)++) {
      for (auto(j) = (0); (j) < (m); (j)++) {
        long long x1 = blue[i].x;
        long long y1 = blue[i].y;
        long long x2 = red[j].x;
        long long y2 = red[j].y;
        long long k1 = x1 + y1;
        long long k2 = x2 - y2;
        double x = (double)(k1 + k2) / 2;
        double y = (double)(k1 - k2) / 2;
        if (fabs((double)blue[i].x - x) <= mi &&
            fabs((double)blue[i].y - y) <= mi &&
            fabs((double)red[j].x - x) <= mi &&
            fabs((double)red[j].y - y) <= mi) {
          v[0][i].push_back({1, j});
          v[1][j].push_back({0, i});
        }
      }
    }
    for (auto(i) = (0); (i) < (n); (i)++) {
      for (auto(j) = (i + 1); (j) < (n); (j)++) {
        int dy = blue[i].y - blue[j].y;
        int dx = blue[i].x - blue[j].x;
        if (dy == -dx && abs(dy) <= 2 * mi)
          v[0][i].push_back({0, j}), v[0][j].push_back({0, i});
      }
    }
    for (auto(i) = (0); (i) < (m); (i)++) {
      for (auto(j) = (i + 1); (j) < (m); (j)++) {
        int dy = red[i].y - red[j].y;
        int dx = red[i].x - red[j].x;
        if (dy == dx && abs(dy) <= 2 * mi)
          v[1][i].push_back({1, j}), v[1][j].push_back({1, i});
      }
    }
    good = 0;
    for (auto(i) = (0); (i) < (n); (i)++) {
      done[0] = done[1] = 0;
      if (!seen[0][i] && !good) dfs(0, i, -1, -1);
    }
    if (good) {
      hi = mi;
    } else {
      lo = mi + 1;
    }
  }
  if (lo == 10000000) {
    puts("Poor Sereja!");
  } else
    printf("%lld\n", lo);
  return 0;
}
