#include <bits/stdc++.h>
#define int long long
using namespace std ;
struct Edge{
int u , v , w ;
}edge[250005];
bool cmp ( Edge a, Edge b ){
return a.w > b.w ;
}
int n , m , fa[502] , cnt , ct , ans , a[502] ;
int find_root( int x ){
if( fa[x] == x ){
return x ;
}
return fa[x] = find_root(fa[x]);
}
void make_together( int x , int y ){
fa[find_root( x )] = find_root(y);
return ;
}
signed main(){
scanf("%lld%lld" , &n , &m );
for( int i = 1 ; i <= n ; i++ ){
scanf("%lld" , &a[i] );
fa[i]= i ;
}
cnt = 0 ;
ans = 0 ;
ct = n ;
for( int i = 1; i <= n ; i++ ){
for( int j = i +1; j <= n; j ++){
edge[++cnt].u = i ;
edge[cnt].v = j ;
int x , y ;
x = powl( a[i] , a[j] );
y = powl( a[j] , a[i] );
edge[cnt].w = ( x + y ) % m ;
}
}
sort( edge+1,edge+cnt+1 , cmp );
for( int i = 1 ; i <= cnt ; i ++ ){
if( find_root( edge[i].u ) != find_root( edge[i].v )){
ct -- ;
ans += edge[i].w ;
make_together( edge[i].u , edge[i].v );
}
if( ct == 1 ){
cout << ans << endl;
return 0 ;
}
}
}