#include <bits/stdc++.h>
using namespace std;
int tree[4 * 1000010], elements[1000010], a[1000010];
int n, m, length;
void add(int node, int left, int right, int position) {
  if ((position < left) or (right < position)) return;
  if (left == right) {
    tree[node] = 1;
    return;
  }
  int lchild = 2 * node + 1, rchild = 2 * node + 2, mid = (left + right) / 2;
  add(lchild, left, mid, position);
  add(rchild, mid + 1, right, position);
  tree[node] = tree[lchild] + tree[rchild];
}
void del(int node, int left, int right, int rank) {
  if ((rank > tree[node]) or (rank <= 0)) return;
  if (left == right) {
    tree[node] = 0;
    return;
  }
  int lchild = 2 * node + 1, rchild = 2 * node + 2, mid = (left + right) / 2;
  int lsum = tree[lchild], rsum = tree[rchild];
  del(lchild, left, mid, rank);
  del(rchild, mid + 1, right, rank - lsum);
  tree[node] = tree[lchild] + tree[rchild];
}
bool check(int node, int left, int right, int position) {
  if (left == right) {
    return (tree[node] == 1);
  }
  int lchild = 2 * node + 1, rchild = 2 * node + 2, mid = (left + right) / 2;
  if (position > mid)
    return check(rchild, mid + 1, right, position);
  else
    return check(lchild, left, mid, position);
}
int main() {
  cin >> n >> m;
  for (int i = 0; i < m; i++) scanf("%d", a + i);
  memset(tree, 0, sizeof(tree)), memset(elements, -1, sizeof(elements));
  length = 0;
  for (int ii = 0; ii < n; ii++) {
    int q;
    scanf("%d", &q);
    if (q != -1) {
      elements[ii] = q;
      add(0, 0, n - 1, ii);
      length += 1;
    } else {
      for (int i = 0; (a[i] - i) <= length and i < m; i++) {
        del(0, 0, n - 1, a[i] - i);
        length -= 1;
      }
    }
  }
  bool flag = 1;
  for (int i = 0; i < n; i++)
    if (check(0, 0, n - 1, i)) printf("%d", elements[i], i), flag = 0;
  if (flag) printf("Poor stack!");
  printf("\n");
}
