#include<stdio.h>
__int64 quick(int a,int b) {
__int64 ans=1,base=a;
__int64 t=0;
while(b) {
if(b&1) {
ans=ans*base%1000;
}
base=base*base%1000;
b>>=1;
}
return ans;
}
int main() {
int n,m;
while(scanf("%d %d",&n,&m),n||m) {
int t;
t=quick(n,m);
printf("%d\n",t);
}
return 0;
}
//现在来讲max的作用,用来把数变小的,我们可以想象如果是很大的数的很高次方,
//乘几次后数据非常大无法用任何一个基本数据类型表示,而且这也是不必要的,
//通常我们只需要知道最后若干位的值,这就可以用到取余了,
//余数的幂和原数的幂在余数的位数上是相同的,所以每次进行乘法运算后都要取余,
//当然如果数据很小也可以不用取余。