OI XXVII - mar

// https://szkopul.edu.pl/problemset/problem/kvwWom2nxVBqipEfeiMtidn5/site/?key=statement

// Marudny Bajtazar

#include <bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>

using namespace std;

#define int long long

constexpr int sizik = 100 * 1001, sizik2 = 1000;

#define ar std::array
#define pr std::pair
#define vec std::vector

typedef vec<vec<int>> _kra;

// #define GARY_DBG

#ifdef GARY_DBG
constexpr int p = 5;
#else
constexpr int p = 37;
#endif
constexpr int mod = 1000 * 1000 * 1000 + 9;
int powP[sizik];

int local_arr[sizik];
__gnu_pbds::gp_hash_table<int, int> logi[sizik2];

int pot(int a, int b) {
    a %= mod;
    if (b == 1) return a % mod;
    if (a == 0) return 0;
    if (b == 0) return 1;
    if (b % 2 == 1)
        return (a * pot(a, b - 1)) % mod;
    else {
        int c = pot(a, b / 2);
        return (c * c) % mod;
    }
}

// 1 ~> 2 ; 2 ~> 1
int rev(int a) {
    return a ^ 3;
}

void minusminus(int i, int a) {
    if (--logi[i][a] <= 0) logi[i].erase(a);
}

int n, m;
int check() {
    for (int i = 1; (1 << (i - 1)) <= n; i++) {
        if ((int)logi[i].size() != (1 << i)) {
            return i;
        }
    }
    return -1;
}

int get(int a, int x) {
    if (a == x)
        return rev(local_arr[a]);
    else
        return local_arr[a];
}

void solve() {
    std::cin >> n >> m;

    powP[0] = 1;
    for (int i = 1; i <= n; i++) {
        powP[i] = (powP[i - 1] * p) % mod;
    }

    const int PPOTMODM2 = pot(p, mod - 2);

    for (int i = 1; i <= n; i++) {
        char c;
        std::cin >> c;
        local_arr[i] = c - '0' + 1;
    }

    for (int i = 1; (1ll << i) <= n; i++) {
        int curr_hash = 0;
        for (int j = 1; j <= i; j++) {
            curr_hash = (curr_hash + powP[j - 1] * local_arr[j]) % mod;
        }
        logi[i][curr_hash]++;
        for (int j = 1; j + i - 1 < n; j++) {
            curr_hash = (curr_hash + mod - powP[0] * local_arr[j]) % mod;
            curr_hash = (curr_hash * PPOTMODM2) % mod;
            curr_hash = (curr_hash + powP[i - 1] * local_arr[j + i]) % mod;
            logi[i][curr_hash]++;
        }
    }

    std::cout << check() << '\n';

    for (; m > 0; m--) {
        int x;
        std::cin >> x;

        for (int i = 1; (1 << i) <= n; i++) {
            int curr_hash = 0, curr_hash1 = 0;

            int start_index = std::max(1ll, x - i + 1);
            int end_index = std::min(n, x + i - 1);

            if (start_index + i - 1 > n) {
                break;
            }

            for (int j = start_index; j <= start_index + i - 1; j++) {
                curr_hash = (curr_hash + powP[j - start_index] * local_arr[j]) % mod;
                curr_hash1 = (curr_hash1 + powP[j - start_index] * get(j, x)) % mod;
            }
            minusminus(i, curr_hash);
            logi[i][curr_hash1]++;
            for (int j = start_index; j <= x - 1 && j + i - 1 < n; j++) {
                curr_hash = (curr_hash + mod - powP[0] * local_arr[j]) % mod;
                curr_hash = (curr_hash * PPOTMODM2) % mod;
                curr_hash = (curr_hash + powP[i - 1] * local_arr[j + i]) % mod;
                // logi[i][curr_hash]--;
                minusminus(i, curr_hash);

                curr_hash1 = (curr_hash1 + mod - powP[0] * get(j, x)) % mod;
                curr_hash1 = (curr_hash1 * PPOTMODM2) % mod;
                curr_hash1 = (curr_hash1 + powP[i - 1] * get(j + i, x)) % mod;
                logi[i][curr_hash1]++;
            }
        }

        std::cout << check() << '\n';

        local_arr[x] = rev(local_arr[x]);
    }
}

int32_t main() {
    // std::ios_base::sync_with_stdio(0);
    // std::cin.tie(0);
    // std::cout.tie(0);

    int t = 1;
    // std::cin >> t;

    for (; t > 0; t--) {
        solve();
    }

    return 0;
}