#include<bits/stdc++.h>
#define FILE "read"
#define MAXN 300010
const double pi=acos(-1);
int n,m,R[MAXN];
namespace INIT{
char buf[1<<15],*fs,*ft;
inline char getc(){return (fs==ft&&(ft=(fs=buf)+fread(buf,1,1<<15,stdin),fs==ft))?0:*fs++;}
inline int read(){
int x=0,f=1; char ch=getc();
while(!isdigit(ch)) {if(ch=='-') f=-1; ch=getc();}
while(isdigit(ch)) {x=x*10+ch-'0'; ch=getc();}
return x*f;
}
}using namespace INIT;
const int OUT=500000;
char Out[OUT],*ou=Out;int Outn[30],Outcnt;
inline void write(int x){
if(!x)*ou++=48;
else{
for(Outcnt=0;x;x/=10)
Outn[++Outcnt]=x%10+48;
while(Outcnt)*ou++=Outn[Outcnt--];
}
}
struct complex{
double r,v;
complex(double a=0,double b=0):r(a),v(b){}
inline complex operator +(const complex &b){return complex(r+b.r,v+b.v);}
inline complex operator -(const complex &b){return complex(r-b.r,v-b.v);}
inline complex operator *(const complex &b){return complex(r*b.r-v*b.v,r*b.v+v*b.r);}
}A[MAXN],B[MAXN],w[MAXN];
inline void swap(complex &a,complex &b){complex t(a);a=b;b=t;}
void FFT(complex *a,int L,int f){
for(int i=0;i<L;++i) if(i<R[i]) swap(a[i],a[R[i]]);
for(int len=2;len<=L;len<<=1){
int l=(len>>1);
for(int i=1;i<l;++i) w[i]=w[i-1]*wn;
for(int st=0;st<L;st+=len)for(int k=0;k<l;++k){
complex x=a[st+k],y=w[k]*a[st+k+l];
a[st+k]=x+y; a[st+k+l]=x-y;
}
}
}
void solve(){
int L=1,H=0; while(L<n+m) L<<=1,++H; w[0]=1;
for(int i=0;i<L;++i) R[i]=(R[i>>1]>>1)|((i&1)<<(H-1));
FFT(A,L,1);
for(int i=1;i<L;++i){
double x1=A[i].r,x2=A[L-i].r;
double y1=A[i].v,y2=A[L-i].v;
B[i]=a*b;
}B[0]=A[0].v*A[0].r;
FFT(B,L,-1);
for(int i=0;i<n+m-1;++i) write(int(B[i].r/L+0.5)),*ou++=32;
fwrite(Out,1,ou-Out,stdout);
}
void solve2(){
for(int i=0;i<n+m-1;++i){
int ret=0;
for(int j=0;j<=i;++j) ret+=A[j].r*A[i-j].v;
printf("%d ",ret);
}
}
int main(){
n=read()+1; m=read()+1;
for(int i=0;i<n;++i) A[i].r=read();
for(int i=0;i<m;++i) A[i].v=read();
if(n<=8&&m<=8) {solve2(); return 0;}
solve();
return 0;
}