#include <bits/stdc++.h>
using namespace std;
int tree[1000005 * 3], ara[1000005 + 3];
void built_tree(int node, int a, int b) {
  if (a == b) {
    tree[node] = ara[a];
    return;
  }
  int left = node << 1;
  int right = (node << 1) + 1;
  int mid = (a + b) / 2;
  built_tree(left, a, mid);
  built_tree(right, mid + 1, b);
  tree[node] = tree[left] + tree[right];
}
int update_tree2(int node, int a, int b, int k) {
  if (a == b) {
    tree[node]--;
    return a;
  }
  int left = node << 1;
  int right = (node << 1) + 1;
  int mid = (a + b) / 2;
  int x = 0, y = 0;
  if (tree[left] >= k)
    x = update_tree2(left, a, mid, k);
  else if (tree[right] >= k - tree[left])
    y = update_tree2(right, mid + 1, b, k - tree[left]);
  tree[node] = tree[left] + tree[right];
  return max(x, y);
}
void update_tree(int node, int a, int b, int indx) {
  if (indx > b || indx < a) return;
  if (a == b) {
    tree[node]++;
    return;
  }
  int left = node << 1;
  int right = (node << 1) + 1;
  int mid = (a + b) / 2;
  update_tree(left, a, mid, indx);
  update_tree(right, mid + 1, b, indx);
  tree[node] = tree[left] + tree[right];
}
int main() {
  int n, q, i, ki, a;
  scanf("%d%d", &n, &q);
  for (i = 1; i <= n; i++) {
    scanf("%d", &a);
    ara[a]++;
  }
  built_tree(1, 1, n);
  for (i = 1; i <= q; i++) {
    scanf("%d", &ki);
    if (ki >= 1)
      update_tree(1, 1, n, ki);
    else
      update_tree2(1, 1, n, -ki);
  }
  printf("%d\n", update_tree2(1, 1, n, 1));
  return 0;
}
