#include <bits/stdc++.h>
using namespace std;
int k,m,a[510],fa[510],cnt=0;
long long int ans=0;
struct node{
int x,y,z;
}n[251000];
long long int power(int a,int b,int p)
{
long long int ans=1;
while(b)
{
if(b&1)
ans=ans*a%p;
a=a*a%p;
b=(b>>1);
}
return ans;
}
int find(int x)
{
if(x!=fa[x]) fa[x]=find(fa[x]);
return fa[x];
}
void merge(int x,int y)
{
fa[find(y)]=find(x);
}
bool cmp(node x,node y)
{
return x.z>y.z;
}
int main()
{
scanf("%d%d",&k,&m);
for(int i=1;i<=k;i++)
fa[i]=i;
for(int i=1;i<=k;i++)
scanf("%d",&a[i]);
for(int i=1;i<=k;i++)
for(int j=i+1;j<=k;j++)
{
n[++cnt].x=i;
n[cnt].y=j;
n[cnt].z=(power(a[i],a[j],m)+power(a[j],a[i],m))%m;
}
sort(n+1,n+cnt+1,cmp);
int f=0;
for(int i=1;i<=cnt;i++)
{
if(find(n[i].x)!=find(n[i].y))
{
merge(n[i].x,n[i].y);
ans+=n[i].z;
f++;
}
if(f==k-1)
{
printf("%lld",ans);
return 0;
}
}
}