#include <bits/stdc++.h>
using namespace std;
long long modValue(long long &a, long long b = 1000000007) {
  a %= b;
  if (a < 0) {
    a += b;
  }
  return a;
}
long long bigmod(long long p, long long e, long long M) {
  long long ret = 1;
  while (e > 0) {
    if (e % 2) ret = (ret * p) % M;
    p = (p * p) % M;
    e /= 2;
  }
  return ret;
}
long long power(long long x, long long y) {
  long long ans = 1;
  while (y > 0) {
    if (y % 2) ans *= x;
    x *= x;
    y /= 2;
  }
  return ans;
}
long long gcd(long long a, long long b) {
  a = abs(a);
  b = abs(b);
  while (b != 0) {
    a = a % b;
    swap(a, b);
  }
  return a;
}
long long lcm(long long a, long long b) { return a * (b / gcd(a, b)); }
int n, q, a[100005], b[100005], tr[100005 * 4];
void update(int x, int b, int e, int i, int j, int val) {
  if (b == i && e == j) {
    tr[x] = val;
    return;
  }
  int y = b + e >> 1;
  if (tr[x] != 2139062143) {
    update(x + x, b, y, b, y, tr[x]);
    update(x + x + 1, y + 1, e, y + 1, e, tr[x]);
    tr[x] = 2139062143;
  }
  if (j <= y) {
    update(x + x, b, y, i, j, val);
  } else if (i > y) {
    update(x + x + 1, y + 1, e, i, j, val);
  } else {
    update(x + x, b, y, i, y, val);
    update(x + x + 1, y + 1, e, y + 1, j, val);
  }
}
int query(int x, int b, int e, int i) {
  if (b == e) {
    return tr[x];
  }
  int y = b + e >> 1;
  if (tr[x] != 2139062143) {
    update(x + x, b, y, b, y, tr[x]);
    update(x + x + 1, y + 1, e, y + 1, e, tr[x]);
    tr[x] = 2139062143;
  }
  if (i <= y) {
    return query(x + x, b, y, i);
  }
  return query(x + x + 1, y + 1, e, i);
}
int main() {
  cin >> n >> q;
  for (int i = 1; i <= n; i++) {
    scanf("%d", a + i);
  }
  for (int i = 1; i <= n; i++) {
    scanf("%d", b + i);
  }
  memset(tr, 127, sizeof tr);
  int c, x, y, z;
  for (int i = 0; i < q; i++) {
    scanf("%d", &c);
    if (c == 1) {
      scanf("%d %d %d", &x, &y, &z);
      update(1, 1, n, y, y + z - 1, x - y);
    } else {
      scanf("%d", &x);
      int idx = query(1, 1, n, x);
      printf("%d\n", idx == 2139062143 ? b[x] : a[x + idx]);
    }
  }
}
