//range mininum query
/*#include<stdio.h>
#include<iostream>
#include<vector>
#define N 100002
#define Dim 0x3f3f3f3f
using namespace std;
long int a[N],v[N],t,n,m;
int main()
{
freopen("rmq.in","r",stdin);
freopen("rmq.out","w",stdout);
long int i,j,x,y,s,d;
scanf("%ld\n%ld",&n,&m);
for(i=1;i<=n;i++)
scanf("%d",&a[i]);
for(t=0;t*t<n;t++);
for(i=1;t*i<=n;i++)
{
v[i]=Dim;
for(j=t*(i-1)+1;j<=t*i;j++)
v[i]=min(v[i],a[j]);
}
for(i=1;i<=m;i++)
{
long int ans;
ans=Dim;
scanf("%d %d",&x,&y);
for(j=1;j*t<x;j++);
s=min(t*j,y);
j++;
for(;j*t<=y;j++)
ans=min(ans,v[j]);
d=max((j-1)*t,x);
for(j=x;j<=s;j++)
ans=min(ans,a[j]);
for(j=d;j<=y;j++)
ans=min(ans,a[j]);
printf("%d\n",ans);
}
}*/
//exponentiere rapida in O(logP)
#include<bits/stdc++.h>
using namespace std;
const int N=10001;
const int mod=1999999973;
int main()
{
unsigned int i,n,p;
long long ans,sol=1;
freopen("lgput.in","r",stdin);
freopen("lgput.out","w",stdout);
scanf("%d%d",&n,&p);
ans=n;
for(i=0;(1<<i)<=p;i++)
{
if( ( (1<<i) & p) ==(1<<i))
sol=(sol*ans)%mod;
ans=(ans*ans)%mod;
}
printf("%d",sol);
}