#include <stdio.h>
#include <stdlib.h>

#define SIZE 128

typedef struct Node {
    int key;
    int val[2];
    struct Node* next;
} Node;

typedef struct {
    Node* table[SIZE];
} haxiset;

haxiset* create() {
    haxiset* ht = (haxiset*)malloc(sizeof(haxiset));
    // if (ht == NULL) {
    //     fprintf(stderr, "Memory allocation failed\0");
    //     exit(EXIT_FAILURE);
    // }
    for (int i = 0; i < SIZE; i++) {
        ht->table[i] = NULL;
    }
    return ht;
}

unsigned int haxifunc(int k) {
    return (unsigned int)(k % SIZE + SIZE) % SIZE; // 确保k为非负数
}

void insert(haxiset* ht, int k, int val, int cns) {
    int haxi = haxifunc(k);
    Node* newnode = (Node*)malloc(sizeof(Node));
    // if (newnode == NULL) {
    //     fprintf(stderr, "Memory allocation failed\n");
    //     exit(EXIT_FAILURE);
    // }
    newnode->key = k;
    newnode->val[0] = val;
    newnode->val[1] = cns;
    newnode->next = ht->table[haxi];
    ht->table[haxi] = newnode;
}

int search(haxiset* ht, int k, int setalltime, int setallval) {
    int haxi = haxifunc(k);
    Node* node = ht->table[haxi];
    while (node != NULL) {
        if (node->key == k) {
            if (setalltime > node->val[1]) return setallval;
            return node->val[0];
        }
        node = node->next;
    }
    return -1;
}

void destory(haxiset* ht) {
    for (int i = 0; i < SIZE; i++) {
        Node* node = ht->table[i];
        while (node != NULL) {
            Node* pre = node;
            node = node->next;
            free(pre);
        }
    }
    free(ht);
}

int main() {
    int n = 0;
    scanf("%d", &n);
    haxiset* ht = create();
    int setalltime = -1;
    int setallval;
    for (int choose = 0, cns = 0, k, v, ans; cns < n; cns++) {
        scanf("%d", &choose);
        switch (choose) {
            case 1:
                scanf("%d %d", &k, &v);
                insert(ht, k, v, cns);
                break;
            case 2:
                scanf("%d", &k);
                ans = search(ht, k, setalltime, setallval);
                printf("%d\n", ans);
                break;
            case 3:
                scanf("%d", &setallval);
                setalltime = cns;
                break;
        }
    }
    destory(ht);

    return 0;
}