map<int, set<int> > m; int n, q, ans = 2147483647;
voidfind(int s, int x){ auto it = m[s].lower-bound(x); if (it != m[s].end()) ans = min(ans, *it - x); if (it != m[s].begin()) ans = min(ans, x - *--it); }
intmain(){ scanf("%d %d", &n, &q); for (int i = 1, x; i <= n; i++) { scanf("%d", &x); m[x].insert(i); } for (; q--; ) { int x, y; scanf("%d %d", &x, &y); if (x == y) printf("%d\n", ans); else { for (auto it = m[x].begin(); it != m[x].end(); ++it) { find(y, *it); m[y].insert(*it); } m[x].clear(); printf("%d\n", ans); } } return0; }