#include <bits/stdc++.h>
int main() {
  std::ios::sync_with_stdio(false);
  std::cin.tie(0);
  std::cout.tie(0);
  int32_t n, num_queries;
  std::cin >> n >> num_queries;
  int32_t block_size = std::min(n, (int32_t)std::ceil(std::sqrt(n + 10)));
  int32_t num_blocks = (n + block_size - 1) / block_size + 10;
  int32_t* block_sums = new int32_t[num_blocks];
  for (int32_t i = 0; i < num_blocks; i++) block_sums[i] = 0;
  int32_t* packets = new int32_t[n + 10];
  for (int32_t i = 0; i < n + 10; i++) packets[i] = 0;
  for (int32_t i = 0; i < n; i++) {
    int32_t cur;
    std::cin >> cur;
    packets[cur]++;
    block_sums[cur / block_size]++;
  }
  for (int32_t q = 0; q < num_queries; q++) {
    int32_t query;
    std::cin >> query;
    if (query > 0) {
      packets[query]++;
      block_sums[query / block_size]++;
    } else {
      query = -query;
      int32_t crossed = 0;
      int32_t target_block = 0;
      for (int32_t i = 0; i < num_blocks; i++) {
        if (crossed + block_sums[i] >= query) {
          target_block = i;
          break;
        }
        crossed += block_sums[i];
      }
      block_sums[target_block]--;
      for (int32_t j = target_block * block_size; j <= n; j++) {
        if (crossed + packets[j] >= query) {
          packets[j]--;
          break;
        }
        crossed += packets[j];
      }
    }
  }
  for (int32_t i = 0; i < n + 10; i++)
    if (packets[i] > 0) {
      std::cout << i;
      return 0;
    }
  std::cout << 0;
  return 0;
}
