func_code_string: #include <bits/stdc++.h>   using namespace std;   const int N = 100010;   int Mo[N], a[N];   inline int gi() {     int x = 0, o = 1;     char ch = getchar();     while (ch !=  -  && (ch <  0  || ch >  9 )) ch = getchar();     if (ch ==  - ) ch = getchar(), o = -1;     while (ch >=  0  && ch <=  9 ) x = x * 10 + ch -  0 , ch = getchar();     return x * o;   }   inline int phi(int x) {     int ret = x, y = x;     for (int i = 2; i * i <= y; i++)       if (x % i == 0) {         while (x % i == 0) x /= i;         ret = ret / i * (i - 1);       }     if (x > 1) ret = ret / x * (x - 1);     return ret;   }   inline void calc(int &x, int y, int M) {     long long c = 1LL * x * y;     x = (c < M ? c : c % M + M);   }   inline int Pow(int x, int y, int M) {     int ret = 1;     while (y) {       if (y & 1) calc(ret, x, M);       calc(x, x, M), y >>= 1;     }     return ret;   }   inline int solve(int l, int r, int t) {     if (Mo[t] == 1) return 1;     if (l == r) {       if (a[l] < Mo[t]) return a[l];       return a[l] % Mo[t] + Mo[t];     }     return Pow(a[l], solve(l + 1, r, t + 1), Mo[t]);   }   int main() {     int n, m, q;     cin >> n >> m;     Mo[1] = m;     for (int i = 1; Mo[i] ^ 1;) Mo[++i] = m = phi(m);     for (int i = 1; i <= n; i++) a[i] = gi();     cin >> q;     while (q--) {       int l = gi(), r = gi();       printf( %d n , solve(l, r, 1) % Mo[1]);     }     return 0;   }   