#include<bits/stdc++.h>
using namespace std;
#define ws 100007
const int maxw=9; //maxw表示每一位的最大数,不同进制可以不同表示 
struct Big{
	int a[ws],len;
	bool flag;
}a,b,c;
Big clr(){
	Big x;
	memset(x.a,0,sizeof(x.a));
	x.flag=x.len=0;
	return x;
}
Big init(string s){
	Big x;
	x.len=s.length();
	if(s[0]=='-') x.flag=1;
	else x.a[x.len]=s[0]-'0';
	for(int i=x.len-1;i>=1;i--) x.a[x.len-i]=s[i]-'0';
	return x;
}
Big cpy(Big y){
	Big x;
	x.len=y.len;
	x.flag=y.flag;
	for(int i=1;i<=x.len;i++) x.a[i]=y.a[i];
	return x;
}
Big add(Big x,Big y){
	Big z;
	z.len=max(x.len,y.len);
	for(int i=1;i<=z.len;i++){
		z.a[i]+=x.a[i]+y.a[i];
		z.a[i+1]+=z.a[i]/(maxw+1);
		z.a[i]%=(maxw+1);
	}
	while(z.a[z.len+1]){
		z.len++;
		z.a[z.len+1]=z.a[z.len]/(maxw+1);
		z.a[z.len]%=(maxw+1);
	}
	return z;
}
int cmp(Big x,Big y){ //-1:x<y 0:x==y 1:x>y 
	if(x.len>y.len) return 1;
	if(x.len<y.len) return -1;
	for(int i=x.len;i>0;i--){
		if(x.a[i]>y.a[i]) return 1;
		if(x.a[i]<y.a[i]) return -1;
	}
	return 0;
}
Big sub(Big x,Big y){
	Big z;
	if(cmp(x,y)<0){
		z=cpy(x);
		x=cpy(y);
		y=cpy(z);
		z.flag=1;
	}
	memset(z.a,0,sizeof(z.a));
	z.len=x.len;
	for(int i=1;i<=x.len;i++){
		z.a[i]+=x.a[i]-y.a[i];
		if(z.a[i]<0){
			z.a[i]+=10;
			z.a[i+1]--;
		}
	}
	while(!z.a[z.len]) z.len--;
	return z;
}
int main(){
	string a,b;
	cin >> a >> b;
	Big x=init(a),y=init(b);
	Big z=sub(x,y);
	for(int i=z.len;i>0;i--) cout << z.a[i];
}