func_code_string: #include <bits/stdc++.h>   using namespace std;   inline int read() {     int out = 0, fh = 1;     char jp = getchar();     while ((jp >  9  || jp <  0 ) && jp !=  - ) jp = getchar();     if (jp ==  - ) fh = -1, jp = getchar();     while (jp >=  0  && jp <=  9 ) out = out * 10 + jp -  0 , jp = getchar();     return out * fh;   }   void print(int x) {     if (x >= 10) print(x / 10);     putchar( 0  + x % 10);   }   void write(int x, char c) {     if (x < 0) putchar( - ), x = -x;     print(x);     putchar(c);   }   int phi(int x) {     int res = x;     for (int i = 2; i * i <= x; ++i)       if (x % i == 0) {         res /= i, res *= i - 1;         while (x % i == 0) x /= i;       }     if (x > 1) res /= x, res *= x - 1;     return res;   }   int mul(int a, int b, int Mod) {     long long pr = 1LL * a * b;     if (pr < Mod) return pr;     return pr % Mod + Mod;   }   int fpow(int a, int b, int Mod) {     int res = 1;     while (b) {       if (b & 1) res = mul(res, a, Mod);       a = mul(a, a, Mod);       b >>= 1;     }     return res;   }   int f(int x, int Mod) {     if (x < Mod) return x;     return x % Mod + Mod;   }   const int N = 1e5 + 10;   int n, m, q, Mod[N], k = 0, a[N];   int query(int l, int r, int p) {     if (l == r || p == k) return f(a[l], Mod[p]);     int base = a[l], expo = query(l + 1, r, p + 1);     return fpow(base, expo, Mod[p]);   }   signed main() {     n = read(), m = read();     while (1) {       Mod[++k] = m;       if (m == 1) break;       m = phi(m);     }     for (int i = 1; i <= n; ++i) a[i] = read();     q = read();     for (int i = 1; i <= q; ++i) {       int l = read(), r = read();       int ans = query(l, r, 1) % Mod[1];       write(ans,   n );     }     return 0;   }   