#include <bits/stdc++.h>
using namespace std;
int n, m;
int s[1000005 * 5], a[1000005], b[1000005];
void add(int k, int l, int r, int x, int v) {
  if (l == r) {
    s[k] = v;
    return;
  }
  int mid = (l + r) / 2;
  if (x <= mid) add(k * 2, l, mid, x, v);
  if (x > mid) add(k * 2 + 1, mid + 1, r, x, v);
  s[k] = s[k * 2] + s[k * 2 + 1];
}
int get(int k, int l, int r, int v) {
  if (l == r) return l;
  int mid = (l + r) / 2;
  if (s[k * 2] >= v) return get(k * 2, l, mid, v);
  if (s[k * 2] < v) return get(k * 2 + 1, mid + 1, r, v - s[k * 2]);
}
int main() {
  cin >> m >> n;
  for (int i = 0; i < n; i++) scanf("%d", &a[i]);
  int len = 0;
  for (int i = 1; i <= m; i++) {
    scanf("%d", &b[i]);
    if (b[i] != -1) {
      len++;
      add(1, 1, m, i, 1);
    }
    if (b[i] == -1) {
      vector<int> need;
      for (int j = 0; j <= n; j++) {
        if (a[j] > len || j == n) {
          len -= j;
          break;
        }
        need.push_back(get(1, 1, m, a[j]));
      }
      for (int j = 0; j < need.size(); j++) {
        add(1, 1, m, need[j], 0);
      }
    }
  }
  if (len == 0) puts("Poor stack!");
  if (len != 0) {
    for (int j = 1; j <= len; j++) {
      printf("%d", b[get(1, 1, m, j)]);
    }
  }
}
