#include<bits/stdc++.h>
using namespace std;
#define open(x) freopen(x ".in", "r", stdin);freopen(x ".out", "w", stdout);
inline int read(){int f=1;int x=0;char c=getchar();while(c<'0'||c>'9'){if(c=='-'){f=-f;}c=getchar();}while(c>='0'&&c<='9'){x=(x<<1)+(x<<3)+(c^48);c=getchar();}return x*f;}
inline void wr(int x){if(x<0){putchar('-');x=-x;}if(x>9){wr(x/10);}putchar(x%10+'0');}
int n,q;
struct node{
int nex,to;
}a[500005];
int used[500050];
int dis[500050];
int idxx[500050];
int head[500050];
int pre[500050];
int ct[500050];
set<int> s;
int id = 1;
int cnt;
inline void addedge(int st,int to){
a[++cnt].to=to;
a[cnt].nex=head[st];
head[st]=cnt;
return;
}
inline void dfs(int x,int fa){
if(used[x] == 1){
id = x;
return;
}
pre[x] = fa;
used[x] = 1;
for(int i=head[x];i;i=a[i].nex){
int v = a[i].to;
if(v==fa) continue;
dfs(v,x);
}
return;
}
inline void dfs_fa(int x,int fa,int root,int dep){
dis[x] = dep;
idxx[x] = root;
for(int i=head[x];i;i=a[i].nex){
int v = a[i].to;
if(v == fa || (s.find(v) != s.end())) continue;
dfs_fa(v,x,root,dep+1);
}
return;
}
signed main(){
n = read();
q = read();
for(int i=1;i<=n;++i){
int x,y;
x = read();
y = read();
addedge(x,y);
addedge(y,x);
}
dfs(1,0);
int kkk = 0;
for(int i=id;i;i=pre[i]){
ct[i] = ++kkk;
}
for(int i=id;i;i=pre[i]){
s.insert(i);
}
for(int i=1;i<=n;++i){
if(s.find(i) != s.end()){
dfs_fa(i,0,i,0);
}
}
while(q--){
int x , y;
x = read();
y = read();
if(x == y){
puts("Deception");
continue;
}
else if(s.find(x) != s.end()){
puts("Survive");
continue;
}
else{
int A = dis[x];
int ida = idxx[x];
int idb = idxx[y];
int maxa = max(ct[ida],ct[idb]);
int mina = min(ct[ida],ct[idb]);
int base_up = min(maxa - mina , kkk - maxa + mina);
int B = dis[y] + base_up;
if(A >= B) puts("Deception");
else puts("Survive");
continue;
}
}
return 0;
}