#include <stdio.h>
#include <algorithm>
#include <cstring>
using namespace std;
const int maxN=1000100;
int a[maxN],f[maxN],ans[maxN];
int n,A;
int main()
{
freopen("1976.in","r",stdin);
freopen("1976.out","w",stdout);
memset(ans,0,sizeof ans);
memset(f,0,sizeof f);
scanf("%d%d",&n,&A);
for (int i=1; i<=n; i++)
{
scanf("%d",&a[i]);
f[a[i]]++;
ans[a[i]]=1;
}
if (f[A]==0) printf("1");else
{
ans[A]=0;
for (int i=1; i<=n; i++)
if (f[a[i]]<f[A]) ans[a[i]]=0;
for (int i=n; i>=1; i--)
{
f[a[i]]--;
if (f[a[i]]<f[A]) ans[a[i]]=0;
if (f[A]==0) break;
}
bool f=0;
for (int i=1; i<=maxN-99; i++)
if (ans[i])
{
printf("%d\n",i);
f=1;
break;
}
if (!f) printf("-1");}
return 0;
}
#include <stdio.h>
#include <cstring>
#include <algorithm>
using namespace std;
#define maxN 3000100
#define F(i,j,n) for (int i=j; i<=n; i++)
int n;
int a[maxN],f[maxN],ans[maxN];
int main()
{
freopen("1977.in","r",stdin);
freopen("1977.out","w",stdout);
scanf("%d",&n);
F(i,1,n) scanf("%d",&a[i]);
memset(f,0,sizeof f);
F(i,1,n)
{
int d=a[i]-i;
if (d>0)
{
ans[0]+=d;
f[0]--;
f[d]++;
}
if (i!=1)
{
d=a[i]-1;
if (d>0)
{
ans[n-i+1]+=d;
f[n-i+1]--;
f[n-i+1+d]++;
}
}
}
int d=f[0],minn=0;
F(i,1,n-1)
{
ans[i]+=ans[i-1]+d;
d+=f[i];
if (ans[i]<ans[minn]) minn=i;
}
printf("%d %d\n",ans[minn]*2,minn);
return 0;
}
#include <stdio.h>
#include <cstring>
#include <algorithm>
using namespace std;
#define maxN 5010
#define ll long long
#define F(i,j,n) for (int i=j; i<=n; i++)
#define D(i,j,n) for (int i=j; i>=n; i--)
struct Tnode{
int v,nxt;
}edge[maxN];
int c[maxN],d[maxN],first[maxN];
int f[2][maxN][maxN],sz[maxN];
int n,m,b,tot;
void init(){ memset(first,-1,sizeof first); tot=0; }
void add(int u,int v){ edge[++tot].v=v,edge[tot].nxt=first[u],first[u]=tot; }
void dfs(int u)
{
f[0][u][0]=0;
f[0][u][1]=c[u];
f[1][u][1]=c[u]-d[u];
sz[u]=1;
for (int i=first[u]; i!=-1; i=edge[i].nxt)
{
int v=edge[i].v;
dfs(v);
D(j,sz[u],0)
F(k,0,sz[v])
{
f[0][u][j+k]=min(f[0][u][j+k],f[0][u][j]+f[0][v][k]);
f[1][u][j+k]=min(f[1][u][j+k],f[1][u][j]+min(f[0][v][k],f[1][v][k]));
}
sz[u]+=sz[v];
}
}
int main()
{
freopen("1978.in","r",stdin);
freopen("1978.out","w",stdout);
scanf("%d%d",&n,&b);
scanf("%d%d",&c[1],&d[1]);
init();
F(i,2,n)
{
int x;
scanf("%d%d%d",&c[i],&d[i],&x);
add(x,i);
}
memset(f,0x7f,sizeof f);
dfs(1);
int ans;
F(i,0,n)
if (f[0][1][i]<=b || f[1][1][i]<=b) ans=i;
printf("%d\n",ans);
return 0;
}