#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=1e6+10;
ll a[N],b[N];
int mood(int x,int l,int p){//逆元操作
ll sum=1;
while(l){
if(l%2==1)sum=sum*x%p;
x=x*x%p;
l/=2;
}
return sum%p;
}
int main(){
ios::sync_with_stdio(false);cin.tie(0);
ll min=1e9;
int ans;
int n,p;
cin>>n>>p;
map<ll,ll>c;
int res=1;
for(int i=1;i<=n;i++)cin>>a[i],a[i]%=p;
for(int i=1;i<=n;i++){
cin>>b[i];
if(a[i]!=b[i])res=0;
}
//特判:若两个序列相同,则x为0
if(res){
cout<<"0"<<endl;
return 0;
}
//要求kx+a[i]=b[i]%p即转化为kx=(b[i]-a[i])%p
for(int i=1;i<=n;i++)c[(b[i]-a[i]+p)%p]=1;
for(int x=1;x<p;x++){
int xx=mood(x,p-2,p);//在求余情况下两数不能直接相除
//使用逆元操作:a∗b≡1(modp)=>要算x/a,就可以改成x*b%p
//cout<<xx<<" "<<x<<" "<<p-2<<endl;
int k=-1;
for(int i=1;i<p;i++){
if(c[i]){
k=max(k,i*xx%p);//当k最大时x最小
}
}
if(k<min){//找最小操作数下的x
min=k;
ans=x;
}
}
cout<<ans<<endl;
return 0;
}