#include <bits/stdc++.h>
using namespace std;
int query, n;
vector<int> st;
int f[1111111], a[1111111];
int low[4444444], high[4444444], mang[4444444];
void build(int s, int dau, int cuoi) {
  low[s] = dau;
  high[s] = cuoi;
  mang[s] = 0;
  if (dau != cuoi) {
    int mid = (dau + cuoi) / 2;
    build(s * 2, dau, mid);
    build(s * 2 + 1, mid + 1, cuoi);
  }
}
void push(int value, int p, int s) {
  if (low[s] == high[s])
    mang[s] += value;
  else {
    if (p <= high[s * 2])
      push(value, p, s * 2);
    else
      push(value, p, s * 2 + 1);
    mang[s] = mang[s * 2] + mang[s * 2 + 1];
  }
}
int found(int value, int s) {
  if (low[s] == high[s])
    return low[s];
  else {
    if (mang[s * 2] >= value)
      return found(value, s * 2);
    else
      return found(value - mang[s * 2], s * 2 + 1);
  }
}
void duyet(int s) {
  if (low[s] == high[s])
    printf("%d", f[low[s]]);
  else {
    if (mang[s * 2]) duyet(s * 2);
    if (mang[s * 2 + 1]) duyet(s * 2 + 1);
  }
}
int main() {
  cin >> query >> n;
  for (int i = 1; i <= n; i++) scanf("%d", &a[i]);
  int np = 0, tp;
  build(1, 1, query);
  memset(f, 0, sizeof(f));
  for (int i = 1; i <= query; i++) {
    scanf("%d", &tp);
    if (tp == -1) {
      st.clear();
      for (int j = 1; j <= n; j++)
        if (a[j] <= mang[1])
          st.push_back(found(a[j], 1));
        else
          break;
      for (int j = 0; j <= int(st.size()) - 1; j++) push(-1, st[j], 1);
    } else {
      np++;
      push(1, np, 1);
      f[np] = tp;
    }
  }
  if (mang[1])
    duyet(1);
  else
    cout << "Poor stack!";
  return 0;
}
