#include using namespace std; int findFoodCount(long long left, long long right, long long x, int currentSum) { //cout << "(left = " << left << ", right = " << right << ", x = " << x << ", currentSum = " << currentSum << ")\n"; if ((left + ((right - left) / 3) <= x) && (right - ((right - left) / 3) >= x)) return currentSum + 1; else if (left + ((right - left) / 3) > x) return findFoodCount(left, left + ((right - left) / 3), x, currentSum + 1); else return findFoodCount(right - ((right - left) / 3), right, x, currentSum + 1); } long long quickPow(long long a, long long n) { long long res = 1; while (n > 0) { if (n & 1) { res = (res * a); n--; } else { n /= 2; a = (a * a); } } return res; } void solve() { freopen("farm.in", "r", stdin); freopen("farm.out", "w", stdout); int p, n; long long x; scanf("%d%d", &p, &n); long long threeToP = quickPow(3, p); for (int i = 0; i < n; i++) { scanf("%lld", &x); if ((x == 1) || (x == 3) || (x == threeToP) || (x == threeToP - 2) || (x == threeToP / 3) || (x == (threeToP / 3) - 2) || (x == (2 * threeToP / 3) + 1) || (x == (2 * threeToP / 3) + 3)) printf("%d\n", p + 1); else printf("%d\n", findFoodCount(0, threeToP, x, 0)); } fclose(stdin); fclose(stdout); } int main() { solve(); return 0; }